mysql - 使用动态变量搜索 JSON_ARRAY
问题描述
是否可以使用变量作为索引而不是硬编码值来搜索 JSON_ARRAY?
这就是我的意思:
SELECT
t1.*,
t1.tickets->>"$[t1.arr_pos]"
FROM
(
SELECT
c.id AS competition_id,
JSON_ARRAYAGG(t.id) AS tickets,
COUNT(t.id) AS tickets_sold,
FLOOR(RAND()*(COUNT(t.id)-0+1)) AS arr_pos
FROM competitions c
JOIN tickets t ON t.competition_id = c.id
WHERE c.end_date = '2021-01-15 15:00:00'
AND c.tickets_sold > 0
GROUP BY c.id
) t1
如果我将 t1.arr_pos 更改为一个数字(0、1、2 等),它显然可以工作,但我需要根据 arr_pos 中包含的内容进行搜索。
解决方案
您可以使用JSON_SEARCH()
函数来确定数组中第一次出现的搜索表达式的索引(在这种情况下,选择一个 id 值数组)以及one
作为第二个参数,然后按此值提取以获得所需的结果。
SELECT t1.*,
JSON_EXTRACT(t1.tickets,
JSON_UNQUOTE(JSON_SEARCH(t1.tickets, 'one', "123"))
-- example id value is 123
) AS Result,
JSON_UNQUOTE(JSON_SEARCH(tickets, 'one', "123")) AS Related_Index
FROM
(
<your subquery>
)
推荐阅读
- regex - 正则表达式拆分 CPU 使用率字符串,没有百分比
- linux - 缺少 Databricks ODBC 驱动程序
- javascript - 将值传递给存储在 Android 资产文件夹中的 HTML 文件
- android - 使用 okhttp 进行身份验证时,此处不允许返回
- python - 如何使用 Python 同时执行多个任务?
- reactjs - 如何将反应草稿文件转换为任何其他格式,例如 pdf
- java - 拆分分隔符java
- html - 用于在 html 文件中设置 css 样式的 vs 代码扩展名?
- javascript - 如何使用获取用户媒体通过麦克风异步记录用户响应,然后将其附加到我的烧瓶应用程序?
- python - 如何将 .docx style_map 导出到巨蟒并嵌入?