sql >> Database teknologi >  >> RDS >> Mysql

Mysql Inner Join and Group Ved at gentage række

Forudsat report til users er en 1:1 forhold, så burde du være i stand til at løse dit problem ved at lave kommentarsammenlægningen i en afledt tabel og slutte dig til den i stedet:

SELECT report.text, 
       Json_arrayagg(Json_object('display_name', users.display_name, 'photo_url' 
                     , 
                     users.photo_url))                       AS USER,
       rc.COMMENTS
FROM   report 
INNER JOIN users ON users.id = report.user_id 
LEFT JOIN (
  SELECT report_id,
         Json_arrayagg(Json_object('text', report_comments.text, 'display_name', 
                                   report_comments.user_id)) AS COMMENTS
  FROM report_comments 
  GROUP BY report_id
) rc ON rc.report_id = report.id 
WHERE  report.user_id = :userId 
GROUP  BY report.id 

Hvis en rapport kan have flere brugere, skal du samle brugeroplysningerne i en afledt tabel på samme måde.




  1. mysql ...i hvor klausulen er tvetydig

  2. Opret en ny MySQL-database ved hjælp af Workbench

  3. Udskiftning af \r\n (nylinjetegn) efter at have kørt json_encode

  4. MySQL - Hvordan sletter man fra tabel, når indlejret udvalg bruger den tabel?