【问题标题】:Group By is sorting the resultsets which I don't want...?Group By 正在对我不想要的结果集进行排序...?
【发布时间】:2012-03-05 08:32:31
【问题描述】:

我正在使用以下 SQL 查询:

SELECT `comment`.`id` AS `comment_id` , count( `comment_likes`.`comment_id` ) AS `number_of_likes`
FROM `comment`
LEFT JOIN `comment_likes` ON `comment`.`id` = `comment_likes`.`comment_id`
WHERE `comment`.`id`
IN ( 10, 5, 7, 8, 3, 2, 9 )
GROUP BY `comment`.`id`

查询结果如下:

comment_id  number_of_likes
2           0
3           1
5           0
7           0
8           0
9           0
10          0

我不想...?我想要相同的顺序给定 where 条件,即 WHERE comment.id IN (10, 5, 7, 8, 3, 2, 9)

所以我希望结果是这样的:

comment_id  number_of_likes
10          0
5           0
7           0
8           0
3           1
2           0
9           0

谁能帮帮我...?

提前致谢.....

【问题讨论】:

    标签: mysql select group-by


    【解决方案1】:

    添加显式ORDER BY。一个有用的函数是FIELD()

    ORDER BY FIELD(comment.id, 10, 5, 7, 8, 3, 2, 9)
    

    【讨论】:

      【解决方案2】:

      你需要使用MySQL的FIELD()才能达到你想要的效果

      SELECT `comment`.`id` AS `comment_id` , 
              count( `comment_likes`.`comment_id` ) AS `number_of_likes`
      FROM `comment` LEFT JOIN `comment_likes` ON 
             `comment`.`id` = `comment_likes`.`comment_id`
      WHERE `comment`.`id`
      IN ( 10, 5, 7, 8, 3, 2, 9 )
      GROUP BY `comment`.`id`
      ORDER BY FIELD(comment.id, 10, 5, 7, 8, 3, 2, 9)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-11
        • 2011-05-25
        相关资源
        最近更新 更多