У меня есть таблица, которую я хотел бы добавить к моему текущему соединению: Таблица (report_images) включает report_id и image_path. Ссылка: Mysql Внутреннее объединение и группировка путем повторения строки Как это сейчас: ["text & ...

0
Printer 3 Янв 2021 в 05:14

1 ответ

Лучший ответ

Вот решение на основе CTE, которое объединяет информацию о пользователях, изображениях и комментариях в CTE, а затем объединяет все эти CTE в таблицу report для сбора всех данных вместе:

WITH user AS (
  SELECT id, JSON_ARRAYAGG(JSON_OBJECT('display_name', u.display_name, 'photo_url', u.photo_url)) AS user
  FROM users u
  WHERE id = 4
),
img AS (
  SELECT report_id, JSON_ARRAYAGG(JSON_OBJECT('image_path', image_path)) AS images
  FROM report_images
  GROUP BY report_id
),
cmt AS (
  SELECT report_id, 
         JSON_ARRAYAGG(JSON_OBJECT('text', rc.text, 'display_name', u.display_name)) AS comments,
         COUNT(*) AS totalcomments
  FROM report_comments rc
  JOIN users u ON rc.user_id = u.id
  GROUP BY report_id
)
SELECT r.text,
       u.user,
       img.images,
       cmt.totalcomments,
       cmt.comments
FROM report r
JOIN user u ON u.id = r.user_id
LEFT JOIN img ON img.report_id = r.id
LEFT JOIN cmt ON cmt.report_id = r.id

Демо на dbfiddle

1
Nick 3 Янв 2021 в 03:10