Mysql 连接多个表的计数

Mysql 连接多个表的计数,mysql,database,join,Mysql,Database,Join,我正在为音乐建立一个博客,我想在列出所有博客文章时计算每个博客文章的喜欢和评论数。我有需要的桌子。这是我的问题 SELECT tbl_music.id, tbl_music.name, tbl_music.img, tbl_music.date, tb

我正在为音乐建立一个博客,我想在列出所有博客文章时计算每个博客文章的喜欢和评论数。我有需要的桌子。这是我的问题

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生成笛卡尔积

最好的解决方案是在加入之前进行聚合:


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