【发布时间】:2016-11-13 19:20:35
【问题描述】:
我在构建 MySQL 查询以返回准确的评论计数、投票总和和活跃用户投票时遇到问题。
我的桌子是
wall_posts ( id, message, username, etc )
comments ( id, wall_id, username, text, etc )
votes ( id, wall_id, vote (+1 or -1), username )
我的查询如下所示
SELECT
wall_posts.*,
COUNT( comments.wall_id ) AS comment_count,
COALESCE( SUM( v1.vote ), 0 ) AS vote_tally,
v2.vote
FROM
wall_posts
LEFT JOIN comments ON wall_posts.id = comments.wall_id
LEFT JOIN votes v1 ON wall_posts.id = v1.wall_id
LEFT JOIN votes v2 ON wall_posts.id = v2.wall_id AND v2.username=:username
WHERE
symbol =: symbol
GROUP BY
wall_posts.id
ORDER BY
date DESC
LIMIT 15
它适用于始终为特定的活跃用户投票(+1 或 -1)返回正确的值,如果没有投票,则返回 null。如果一个项目上没有 cmets,则总票数是正确的。如果有任何 cmets,则投票总和将始终等于评论数,如果有反对票,则可能带有负号,但始终等于 cmets 的数量。
我认为这显然是我连接表格的方式,但我只是无法弄清楚为什么它复制评论计数,1000000 指向可以向我解释这一点的人:)
【问题讨论】: