2012-07-31 98 views
2

以下是帶IN子句的簡單查詢。但問題是我需要得到與ID相同的順序輸出。按照IN子句中的相同順序排列的MySQL順序

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

例如,如果我通過54,68,46然後用usr_id 54行應該先然後68和46然後應該來。有沒有辦法在MySQL中實現這一點?

回答

0

我們可以在命令使用FIND_IN_SET by子句來獲得相同的順序是這樣的值。

選擇username爲用戶用戶表WHERE usr_id IN(54,68,46)ORDER BY FIND_IN_SET(usr_id, 「54,68,46」)

但我不知道如何在同一GROUP_CONCAT訂購。如果有人用這種簡單的方法給出答案,我會接受這個答案;)

1

您需要使用ORDER BY子句中GROUP_CONCAT

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

對不起,但我不想在ASC或DESC順序。我想要在IN子句中傳遞相同的順序。謝謝 – Stranger 2012-07-31 07:19:19

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

+0

它不工作:( – Stranger 2012-07-31 06:59:31

+0

請參閱我的編輯 – 2012-07-31 07:06:36

+0

它顯示錯誤爲'您的SQL語法中有錯誤;請查看與您的MySQL服務器版本相對應的手冊,以找到'usertable'附近使用的正確語法'at line 1:usertable' – Stranger 2012-07-31 07:10:11