MySQL JSON_EXTRACT с LIMIT и OFFSET - PullRequest
0 голосов
/ 05 мая 2020

Допустим, у нас есть столбец JSON Массивы с относительно большим количеством элементов:

----------------------------------------------------------------------
|              |
|   user_id    |            badges 
|              |
----------------------------------------------------------------------
|    123456    |  '["a", "b","c", "d", ... "yz", "zz"]'
|    345678    |  '["1", "2","3", "4", ... "701", "702"]'
----------------------------------------------------------------------

Есть ли способ получить элементы небольшими партиями, аналогично использованию LIMIT и OFFSET для не - JSON запросы?

Например: для получения элементов от 51 до 61:

SELECT badges->>$[*] FROM user_table WHERE user_id = '123456' LIMIT 10 OFFSET 50;

1 Ответ

1 голос
/ 05 мая 2020

В MySQL 8+ вы можете использовать JSON_TABLE для разделения массива JSON на строки, создавая дополнительный столбец, который представляет индекс в массиве (начиная с 1). Затем вы можете использовать этот столбец в предложении WHERE. Например:

SELECT u.user_id,
       b.badge
FROM user_table u
JOIN JSON_TABLE(u.badges,
                '$[*]' COLUMNS
                (rn FOR ORDINALITY,
                 badge VARCHAR(20) PATH '$'
                 )) b
WHERE user_id = '123456' 
  AND b.rn BETWEEN 2 and 4

Вывод (для ваших данных примера)

user_id     badge
123456      b
123456      c
123456      d

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...