9

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

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

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

4

3 回答 3

7

我们可以FIND_IN_SET像这样使用 on order by 子句以相同的顺序获取值。

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相同的顺序。如果有人用这种简单的方法给出答案,我可以接受这个答案。

于 2012-08-03T12:50:41.273 回答
1

您需要在GROUP_CONCATORDER BY中使用子句:

SELECT GROUP_CONCAT(username ORDER BY user_id ASC) as users 
FROM usertable 
WHERE usr_id IN (54,68);
于 2012-07-31T06:45:29.390 回答
1
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 示例

于 2012-07-31T06:46:28.567 回答