我有 2 个表:成员和评论。 我选择所有成员,然后加入评论。 但是在评论中,我选择了一些点的总和,如果用户从未评论过,我就不能让该用户出现在列表中?!
那么如果用户从未评论过,如何将 SUM 的默认值选择为 0,或者其他一些解决方案:
SELECT c.comment_id AS item_id, m.member_id AS member_id, m.avatar,
SUM(c.vote_value) AS vote_value, SUM(c.best) AS best,
SUM(c.vote_value) + SUM(c.best)*10 AS total
FROM members m
LEFT JOIN comments c ON m.member_id = c.author_id
GROUP BY c.author_id
ORDER BY m.member_id DESC
LIMIT 0, 20
编辑:
我会尽力解释... 所以有 2 个表,成员和评论。我需要列出所有具有排名的用户。 评论包含所有投票和最佳答案。
所以,我需要所有用户的列表,以及他们的评分。
成员表:
member_id - username - avatar
评论表
comment_id - author_id - vote_value - best (0 OR 1)
还尝试从 COMMENTS 中选择并加入 MEMBERS,但又是同样的事情 :(
最佳答案
如果您只想要用户及其排名,我不确定为什么要在您的 SELECT 列表中包含 comment_id。您只想要他们对该特定评论的排名吗?我现在会给出一个解决方案,假设您只想要一个带有排名的完整成员列表:
SELECT
M.member_id,
M.user_id,
M.avatar,
COALESCE(SUM(C.vote_value), 0) AS vote_value_sum,
COALESCE(SUM(C.best), 0) AS best_sum,
COALESCE(SUM(C.vote_value), 0) + SUM(C.best) * 10 AS total_value
FROM
Members M
LEFT OUTER JOIN Comments C ON
C.author_id = M.member_id
GROUP BY
M.member_id
ORDER BY
total_value DESC
LIMIT 0, 20
(这假设 vote_value 和 best 不是 NULL 列,或者 MySQL 在计算 SUM 值时会忽略那些 - 我相信它会,但我没有测试过)
关于如果没有结果,MySql 选择默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2922637/