加入多个表的计数

时间:2017-03-11 04:16:23

标签: mysql database join

我正在建立一个音乐博客,我希望在列出所有博客文章时计算每篇博文的喜欢和评论数量。我有需要的表。这是我的查询

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个喜欢)这真是令人沮丧

1 个答案:

答案 0 :(得分:1)

问题是你有两个不同的维度,因此查询会为每个音乐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 ;