我正在运行一个使用 3 个选项卡“帖子、点赞和评论”的查询,我需要获取该帖子获得的点赞和评论数量,同时从帖子表中获取基本信息,因此我使用查询如下,但问题是,如果 Likes 较大,除非 comments 为 0,否则它会将 likeAmount 的值复制到 commentAmount。
SELECT post.*, COUNT(likes.id) as 'LikeAmount', COUNT(comment.id) as 'commentAmount' FROM post
LEFT JOIN likes ON post.id = likes.post
LEFT JOIN comment ON post.id = comment.post
GROUP BY post.id
ORDER BY LikeAmount DESC"
所以这不起作用,但是当我添加不同时它确实起作用,所以当它像这样时:.
SELECT post.*, COUNT(distinct likes.id) as 'LikeAmount', COUNT(distinct comment.id) as 'commentAmount' FROM post
LEFT JOIN likes ON post.id = likes.post
LEFT JOIN comment ON post.id = comment.post
GROUP BY post.id
ORDER BY LikeAmount DESC";
我不明白为什么它与distinct一起工作而不能与out一起使用,并且distinct的数学性能是否明智,或者它是否没有区别,因为它将用于具有大量流量的网站..
最佳答案
试试这个,不短,但可读:
SELECT
p.*,
pl.like_count,
pc.comment_count
FROM post p
#join likes
LEFT OUTER JOIN (
SELECT
post,
COUNT(*) AS like_count
FROM likes
GROUP BY post
) AS pl
ON pl.post = p.id
#join comments
LEFT OUTER JOIN (
SELECT
post,
COUNT(*) AS comment_count
FROM comment
GROUP BY post
) AS pc
ON pc.post = p.id
关于具有 2 个计数和连接的 php 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9362615/