mysql - 连接多个表的计数

标签 mysql database join

我正在建立一个音乐博客,我想在列出所有博客文章时计算每个博客文章的喜欢和评论数量。我有需要的 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/

相关文章:

sqlite - 连接表时压缩具有相同 "key"的行

sql - 有两个具有一对多关系的表A,B。我想通过仅获取 B 中的最新实例来将 A 链接到 B

mysql - 'Age' 中的未知列 'field list'

mysql - mysql 连接的重复结果

mysql - 将 MySQL 结果限制为一周的前几天

.net - Entity Framework - 继承

MySQL - 行到列

amazon linux 上的 mysql - MySQL 守护进程无法启动

swift - Firebase/Swift 两个数据库连接

php - 如何在查询中添加不同的连接