Mysql 获取帖子的总数量和评论

Mysql 获取帖子的总数量和评论,mysql,sql,Mysql,Sql,我想在连接的帮助下,在单个查询中获得每个帖子的总喜欢次数和总计数 我正在使用这个查询。但结果是错误的 选择blog.id、countblog_comments.id作为likes、countblog_likes.id作为comments 从博客左加入 博客评论 ON blog.id=blog\u comments.blog\u id左加入 你喜欢的博客 ON blog.id=blog\u likes.blog\u id 按blog.id分组 请检查图像以了解表结构: 您的问题是,您同时在两个维度

我想在连接的帮助下,在单个查询中获得每个帖子的总喜欢次数和总计数

我正在使用这个查询。但结果是错误的

选择blog.id、countblog_comments.id作为likes、countblog_likes.id作为comments 从博客左加入 博客评论 ON blog.id=blog\u comments.blog\u id左加入 你喜欢的博客 ON blog.id=blog\u likes.blog\u id 按blog.id分组 请检查图像以了解表结构:
您的问题是,您同时在两个维度上聚合。生成一个笛卡尔乘积-一行,每行具有与每个注释相似的对,总共为l*c行

解决此问题的最简单方法是使用DISTINCT关键字:

如果你有很多喜欢和评论的帖子,这是不推荐的,因为它会创建一个两者的笛卡尔乘积

有几种解决方案,但我建议使用相关子查询:

select b.id,
       (select count(*) from blog_likes bl where bl.blog_id = b.id) as likes,
       (select count(*) from blog_comments bc where bc.blog_id = b.id) as comments
from blogs b;

这可以利用blog_上的索引,如blog_id和blog_commentsblog_id。

这是根据我的表,它将帮助您


选择people.pe_name,COUNTdistinct orders.order_id作为num_orders,COUNTitems.item_id作为num_items,从订单上的人员内部加入订单中选择。pe_id=people.pe_id内部加入项目。orders_id=orders.order_id按人员分组。pe_id

该查询的结果是什么,应该是什么?这个问题是PHP特有的吗?它显示的总数为8,但blog_likes表中只有2条记录,blog_id=2。blog_likes中的列id中不应该有相同的值
select b.id,
       (select count(*) from blog_likes bl where bl.blog_id = b.id) as likes,
       (select count(*) from blog_comments bc where bc.blog_id = b.id) as comments
from blogs b;