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

on 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しかし、同じ順序にする方法がわかりません。この種の単純なアプローチで誰かがその答えを出したら、私はその答えを受け入れることができます。

于 2012-08-03T12:50:41.273 に答える
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 に答える
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 に答える