【发布时间】:2012-07-31 06:43:50
【问题描述】:
这是带有 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 中实现这一点?
【问题讨论】:
标签: mysql
这是带有 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 中实现这一点?
【问题讨论】:
标签: mysql
我们可以在 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。如果有人用这种简单的方法给出答案,我可以接受。
【讨论】:
POSITION 而不是FIND_IN_SET
你需要在GROUP_CONCAT中使用ORDER BY子句:
SELECT GROUP_CONCAT(username ORDER BY user_id ASC) as users
FROM usertable
WHERE usr_id IN (54,68);
【讨论】:
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)