代码之家  ›  专栏  ›  技术社区  ›  Harmen

mysql中的join、group by和sum

  •  0
  • Harmen  · 技术社区  · 14 年前

    为了给用户的评论打分,我在MySQL数据库中有以下三个表:

    Users:
    
    id    name
    -----------
    1     Smith
    2     Brown
    
    
    Comments:
    
    id    user_id    post_id    comment
    -----------------------------------
    1     2          1          Test 1
    2     1          1          Test 2
    3     1          1          Test 3
    
    
    Scores:
    
    id    user_id    comment_id    score
    ------------------------------------
    1     1          1             1
    

    现在我想选择所有评论 post_id = 1 ,加上用户名和该特定评论上所有分数的总和。起初看起来很简单,我提出了这个问题:

    SELECT users.name, comments.comment, SUM(scores.score) AS score
    FROM comments
    LEFT JOIN users ON users.id = comments.user_id
    LEFT JOIN scores ON scores.comment_id = comments.id
    WHERE comments.post_id = 1
    GROUP BY scores.comment_id
    

    这似乎可行,但是当一个特定的评论没有得分时,这个评论就不会出现,因为mysql不能 GROUP BY NULL 我想。那么,有没有办法包括那些未分级的评论呢?这样地:

    Query result:
    name     comment    score
    -------------------------
    Brown    Test 1     1
    Smith    Test 2     0
    Smith    Test 3     0
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   gnarf    14 年前

    你可以试着分组 comments.id 或许相反?