Mysql将另一个表添加到Join中
我有一个表要添加到当前加入中: 表report\u images包括一个report\u id和一个image\u路径 参考: 现在情况如何:Mysql将另一个表添加到Join中,mysql,Mysql,我有一个表要添加到当前加入中: 表report\u images包括一个report\u id和一个image\u路径 参考: 现在情况如何: ["text": "My first report", user: [{"display_name": "Cyclops", "photo_url": "CYCLOPS_IMAGE.png"}], comments: [{"t
["text": "My first report", user: [{"display_name": "Cyclops", "photo_url": "CYCLOPS_IMAGE.png"}], comments: [{"text": "Great Report", display_name: "Xavier"}, {"text": "Bad Report", display_name: "Logan"}, {"text": "Thanks for the feedback", display_name: "Cyclops"}]]
我所期望的是:
["text": "My first report", user: [{"display_name": "Cyclops", "photo_url": "CYCLOPS_IMAGE.png"}], images: [{"image_path": "dog.png"}, {"image_path": "cat.png"}], totalComments: 3, comments: [{"text": "Great Report", display_name: "Xavier"}, {"text": "Bad Report", display_name: "Logan"}, {"text": "Thanks for the feedback", display_name: "Cyclops"}]]
当前代码:
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 COUNT(*) AS totalComments, report_id,
Json_arrayagg(Json_object('text', report_comments.text, 'display_name',
users.display_name)) AS COMMENTS
FROM report_comments
JOIN users ON report_comments.user_id = users.id
GROUP BY report_id
) rc ON rc.report_id = report.id
WHERE report.user_id = 4
GROUP BY report.id, rc.COMMENTS
以下是一个基于CTE的解决方案,它将CTE中的用户、图像和评论信息聚合在一起,然后将所有这些CTE连接到报告表中,以收集所有数据: 以用户为 选择id、JSON_arrayagjson_对象'display_name',u.display_name',photo_url',u.photo_url作为用户 来自用户u 其中id=4 , img AS 选择report_id、JSON_Arrayagjson_对象'image_path',image_path作为图像 从报告图像 按报表id分组 , cmt AS 选择报告id, JSON_ARRAYAGGJSON_对象'text',rc.text',display_name',u.display_name作为注释, 将*计算为总注释 来自报告和评论 在rc.user\u id=u.id上加入用户u 按报表id分组 选择r.text, u、 用户, img.images, cmt.totalcomments, cmt.评论 来自报告r 在u.id=r.user\u id上加入用户u 在img.report\u id=r.id上左连接img 在cmt.report\u id=r.id上左连接cmt
我很感激你,你是救世主!我只问了一个问题,这比我以前执行多个查询快吗?这里实际上有4个查询,一个用于每个CTE,另一个用于通过连接所有派生表来给出最终结果。就性能而言,像我现在这样写或者像在您现有的查询中那样写子查询并没有多大区别,我只是认为这是一种更可读的写方法。嗨,Nick,我注意到嵌套数组返回的是字符串而不是json对象。知道为什么吗?@Printer JSON是一种字符串格式。如果您想要一个对象,那么需要解码JSON;在PHP中,您将使用;在JavaScript中,我在PHP端使用json_编码。然后我使用json_解码,我可以访问第一个数组。通过执行例如data[user]的操作,但在其中它只是一个字符串,而不是json数组