我正在建立一个音乐博客,我想在列出所有博客文章时计算每个博客文章的喜欢和评论数量。我有需要的 table 。这是我的查询
SELECT tbl_music.id,
tbl_music.name,
tbl_music.img,
tbl_music.date,
tbl_music.post,
COUNT(*) AS comms,
COUNT(*) AS liky
FROM tbl_music
LEFT JOIN tbl_mlikes
ON tbl_music.id = tbl_mlikes.mid
LEFT JOIN tbl_mus_coms
ON tbl_music.id = tbl_mus_coms.mid
WHERE tbl_music.status = 'Publish'
GROUP BY tbl_music.id
ORDER BY tbl_music.id
DESC
我注意到,它将评论数与喜欢数相乘,并提供答案作为喜欢数,即(如果帖子有 4 条评论和 1 条喜欢,我的查询将显示 4 条评论和 4 条喜欢)这真的很令人沮丧
最佳答案
问题是您有两个不同的维度,因此查询会为每个音乐 id 生成笛卡尔积。
最好的解决方案是在加入之前聚合:
SELECT m.*, l.likes, c.comments
FROM tbl_music m LEFT JOIN
(SELECT mid, COUNT(*) as likes
FROM tbl_mlikes
GROUP BY mid
) l
ON m.id = l.mid LEFT JOIN
(SELECT mc.mid, COUNT(*) as comments
FROM tbl_mus_coms mc
GROUP BY mc.mid
) c
ON m.id = c.mid
WHERE m.status = 'Publish'
ORDER BY m.id DESC ;
关于mysql - 连接多个表的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42731294/