gpt4 book ai didi

mysql - 获取帖子的总数和评论

转载 作者:行者123 更新时间:2023-11-29 05:59:02 25 4
gpt4 key购买 nike

我想借助联接在单个查询中获得每个帖子的总赞数和总计数。

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

SELECT blog.id, count(blog_comments.id) as likes , count(blog_likes.id) as comments
FROM blog LEFT JOIN
blog_comments
ON blog.id = blog_comments.blog_id LEFT JOIN
blog_likes
ON blog.id = blog_likes.blog_id
GROUP BY blog.id

请检查表结构的图像:

最佳答案

您的问题是您同时沿两个维度聚合。生成笛卡尔积 - 一行,每个评论都有相似的对,总共有 l * c 行。

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

SELECT b.id, count(DISTINCT bl.id) as likes , count(DISTINCT bc.id) as comments
FROM blog b LEFT JOIN
blog_comments bc
ON b.id = bc.blog_id LEFT JOIN
blog_likes
ON b.id = bl.blog_id
GROUP BY b.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;

这可以利用 blog_likes(blog_id)blog_comments(blog_id) 上的索引。

关于mysql - 获取帖子的总数和评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46634158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com