Я хочу вернуть запрос mysql со списком элементов и количеством. Какой лучший способ написать это? - PullRequest
0 голосов
/ 04 февраля 2020

Я хочу выбрать все видео с указанным c значением

Я знаю, что именно так вы и получите счет

SELECT COUNT(*) FROM videos WHERE owner=1

, и это это то, как вы получите все видео

SELECT * FROM videos WHERE owner=1

, но я хочу сделать это в одном запросе, где я могу вернуть объект json с массивом видео вместе с количеством как это

{
 videos: [],
 count: 0
}

1 Ответ

3 голосов
/ 04 февраля 2020

MySQL 5.7 имеет функции для JSON_OBJECT () и JSON_ARRAYAGG () , которые могут помочь в этом случае.

SELECT JSON_OBJECT(
  'videos', JSON_ARRAYAGG(videos.title),
  'count', COUNT(*)
) AS result
FROM videos
WHERE owner = 1

Если вы хотите Массив videos должен содержать объекты, а не только строки, а затем вкладывать вызов JSON_OBJECT внутрь.

SELECT JSON_OBJECT(
  'videos', JSON_ARRAYAGG(
    JSON_OBJECT(
      'title', videos.title,
      'owner', videos.owner,
      'rating', videos.rating,
      ...other key-value pairs...
    )
  ),
  'count', COUNT(*)
) AS result
FROM videos
WHERE owner = 1

Если вы хотите ограничить количество строк, включенных в агрегацию, вам придется сделать это в подзапросе производной таблицы, потому что функции агрегирования не имеют никакого способа выполнить LIMIT.

SELECT JSON_OBJECT(...same as above...) AS result
FROM (
    SELECT title, owner, rating
    FROM videos
    WHERE owner = 1
    LIMIT 20 OFFSET 0
) AS t
...