Php MySQL按另一个表的和排序

Php MySQL按另一个表的和排序,php,mysql,sql,mysqli,Php,Mysql,Sql,Mysqli,我目前在mysql中有2个表评论和评论评分 评语评分具有以下结构: +------------+ | Field | +------------+ | id | | comment_id | | user_id | | positive | | created_at | +------------+ 字段正值为1或-11为正值(向上投票)和-1为负值(向下投票) 我有一个最新的问题,它会让我在评论中获得最高的评价: SELECT *, COUNT(comme

我目前在mysql中有2个表评论评论评分

评语评分具有以下结构:

+------------+
| Field      |
+------------+
| id         |
| comment_id |
| user_id    |
| positive   |
| created_at |
+------------+
字段正值为1-11为正值(向上投票)和-1为负值(向下投票)

我有一个最新的问题,它会让我在评论中获得最高的评价:

SELECT *, COUNT(comment_rating.id) AS rating_count FROM comments LEFT JOIN comment_rating ON comments.id = comment_rating.comment_id GROUP BY comments.id ORDER BY rating_count DESC
我需要知道如何(使用mysql查询)我能够获得按最佳评级排序的评论; 意思是按照每个评论的评分总和排序

例如:

  • 评论X有2张赞成票和4张反对票(总计-2张)
  • 注释Y没有投票权(总计0)
  • 评论Z有1票(总计1票)
这些文件的发布顺序如下:

  • 评论Z
  • 注释Y
  • 评论X

  • 谢谢你juergen d

    您的查询几乎完美:

    这是一个稍加修改的版本,可以正确订购:

    SELECT comments.id, 
           COUNT(comment_rating.id) AS rating_count,
           COALESCE(SUM(positive),0) as rating
    FROM comments 
    LEFT JOIN comment_rating ON comments.id = comment_rating.comment_id 
    GROUP BY comments.id 
    ORDER BY rating DESC
    

    这样,如果该行不存在,它将被设置为零而不是空,并且将正确排序。

    谢谢juergen d

    您的查询几乎完美:

    这是一个稍加修改的版本,可以正确订购:

    SELECT comments.id, 
           COUNT(comment_rating.id) AS rating_count,
           COALESCE(SUM(positive),0) as rating
    FROM comments 
    LEFT JOIN comment_rating ON comments.id = comment_rating.comment_id 
    GROUP BY comments.id 
    ORDER BY rating DESC
    

    这样,如果行不存在,它将被设置为零而不是空,并且将正确排序。

    使用
    SUM
    而不是
    COUNT
    。使用
    SUM
    而不是
    COUNT