提问者:小点点

多重连接语句中的计数


我有三个表发布:int id, varchar title注释:intcomment_id,intpost_id,varchar注释喜欢:intlike_id,intpost_id
这里post_id是一个外键引用表发布

我正在努力获取所有帖子,以及每条帖子的评论数和点赞数。

这是我到目前为止所做的:


    SELECT post.id, post.title, count(comment.id) as comments,

    FROM post

    left join comment on comment.post_id = post.id

    GROUP by post.id

这给了我所有帖子的结果和每个帖子的评论数。现在,只要我为likes表添加下一个左连接,计数结果就会返回实际值的两倍。

例如,如果一个帖子 X 有 2 条评论,并且我添加了类似的表加入同一帖子的计数,则开始给我 4 条作为帖子 X 的评论总数。

感谢帮助。


共1个答案

匿名用户

我会使用两个单独的子查询来查找评论和点赞的计数:

SELECT
    p.id,
    p.title,
    COALESCE(c.comment_cnt, 0) AS comments,
    COALESCE(l.like_cnt, 0) AS likes
FROM post p
LEFT JOIN
(
    SELECT post_id, COUNT(*) AS comment_cnt
    FROM comments
    GROUP BY post_id
) c
    ON p.id = c.post_id
LEFT JOIN
(
    SELECT post_id, COUNT(*) AS like_cnt
    FROM likes
    GROUP BY post_id
) l
    ON p.id = l.post_id;