[英]In MySQL, json_search fail with integer element in json_array
[英]Search JSON_ARRAY using dynamic variable
是否可以使用變量作為索引而不是硬編碼值來搜索 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()
function 來確定數組中第一次出現的搜索表達式的索引(在這種情況下,選擇一個 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>
)
無法讓 JSON_SEARCH 工作,但工作如下:
SELECT
t1.*,
JSON_EXTRACT(t1.tickets, CONCAT('$[', t1.arr_pos, ']')) AS winning_ticket
FROM
(
SELECT
c.id AS competition_id,
JSON_ARRAYAGG(t.id) AS tickets,
COUNT(t.id) AS tickets_sold,
FLOOR(RAND()*(COUNT(t.id))) 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.