如果没有结果,MySql 选择默认值?

标签 mysql

我有 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/

相关文章:

php - 使用php从mysql中删除重复项

php - 从 session ID 所在的两个表中获取选择数据

php - 如何使用 Mysql If 函数来评估日期时间列?

php - 硬编码数组和对象还是从数据库填充?

python - Django搭建类似YouTube的视频网站

php - 使用 MeekroDB 查询带限制的 MySQL 字母数字

mysql - SQL顺序和查询结果的限制

sql - WordPress 最新的帖子和评论源?

mysql - 递归连接sql中的列

php - 获得连接表 Yii 2 的值(value)