My SQL 查询包含三个表:posts 表、post_likes 表和 comments 表。 所有表都与 posts 表中的 post_id 主键连接。我试图返回帖子行的内容以及 post_likes 表中喜欢/不喜欢的数量以及评论的数量。该查询工作正常,直到我引入第二个左连接,它现在显示 like_count 列 x5 dislike_count 列 x5 和新的 comment_count x4。
这是有问题的查询:
SELECT c.post_id, c.post_name, c.post_content, c.post_datetime, c.user_name, sum(p.like_count) AS like_count, sum(p.dislike_count) AS dislike_count, sum(s.comment_count) AS comment_count FROM posts c LEFT JOIN post_likes p ON c.post_id = p.post_id LEFT JOIN comments s ON c.post_id = s.post_id WHERE c.user_name = 'test' GROUP BY c.post_id
正在返回总和值:
//column | returned value | expected value
like_count | 10 | 2
dislike_count | 5 | 1
comment_count | 20 | 5
一些附加说明,喜欢/不喜欢的内容存储在具有结构的 poSTLikes 表中。
post_like_id, like_count, dislike_count, post_id, user_name
每一列中的喜欢或不喜欢计数只能为 1,PHP 会处理此问题以确保用户不能多次喜欢等,而 user_name 列是喜欢该帖子的用户。
评论表结构如下:
comment_id, comment_name, comment_content, comment_datetime, comment_count, post_id, user_name
插入时comment_count始终为1以允许求和函数,post_id是评论帖子的id,user_name是评论的用户。
最佳答案
您的连接
正在生成笛卡尔积——而是将聚合结果移动到子查询中:
SELECT c.post_id, c.post_name, c.post_content, c.post_datetime, c.user_name,
p.like_count,
p.dislike_count,
s.comment_count
FROM posts c
LEFT JOIN (
select post_id,
sum(like_count) like_count,
sum(dislike_count) dislike_count
from post_likes
group by post_id
) p ON c.post_id = p.post_id
LEFT JOIN (
select post_id, sum(comment_count) comment_count
from comments
group by post_id
) s ON c.post_id = s.post_id
WHERE c.user_name = 'test'
关于mysql - SQL 查询返回 Sum 和 Count 的错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33381905/