MySQL在IN子句中按相同的顺序排序

时间:2012-07-31 06:43:50

标签: mysql

这是带有IN子句的简单查询。但问题是我需要以ids的相同顺序获得输出。

SELECT GROUP_CONCAT(username) as users FROM usertable WHERE usr_id IN (54,68,46)

例如,如果我通过了54,68,46,那么带有usr_id 54的行应先到68然后再到46。有没有办法在MySQL中实现这一点?

3 个答案:

答案 0 :(得分:2)

SELECT group_concat(username order by case when usr_id=54 
                                           then 0
                                           when usr_id=68
                                           then 1
                                           when usr_id=46
                                           then 2
                                           else 3    
                                      end) as users 
FROM usertable
WHERE usr_id IN (54,68,46)

SQLFiddle example

答案 1 :(得分:1)

您需要在GROUP_CONCAT中使用ORDER BY子句:

SELECT GROUP_CONCAT(username ORDER BY user_id ASC) as users 
FROM usertable 
WHERE usr_id IN (54,68);

答案 2 :(得分:1)

我们可以在order by子句上使用FIND_IN_SET来获取相同顺序的值。

SELECT `username` as users FROM usertable WHERE usr_id IN (54,68,46) ORDER BY FIND_IN_SET(`usr_id`,"54,68,46")

但我不知道如何按同一顺序GROUP_CONCAT。如果有人用这种简单的方法给出答案,我可以接受这个答案。