2011-08-02 10 views
2

別の列でGROUP_CONCAT-ed列を注文する方法があるのだろうかと思っていました。ここに私の例です:GROUP_CONCAT列を注文する(MySQL)

テーブル

ユーザー

id | name 
----+------------ 
    0 | John Smith 

users_majors

user_id | major_id | order 
--------+----------+------- 
    0 | 2  | 1 
    0 | 1  | 0 

専攻

id | name 
----+------------- 
    0 | Biology 
    1 | Chemistry 
    2 | Engineering 
予想通り、私は、この結果セットを受け取る

SELECT `users`.*, GROUP_CONCAT(DISTINCT `majors`.name) AS major, GROUP_CONCAT(DISTINCT `users_majors`.order) AS major_order 
FROM `users` 
LEFT JOIN users_majors ON (users_majors.user_id = users.id) 
LEFT JOIN majors ON (majors.id = users_majors.major_id) 
GROUP BY users.id 

:ここ

そしては私のクエリです

id | name  | major     | major_order 
---+-------------+-----------------------+------------- 
0 | John Smith | Engineering,Chemistry | 1,0 

私は自動的に並べ替えることが「主要な」列を持っているやりたいです」私はその列を削除して、結果セットを次のようにします:

id | name  | major 
---+-------------+----------------------- 
0 | John Smith | Chemistry,Engineering 

何か提案がありますか?

答えて

2

GROUP_CONCATには、ORDER BYオプションが含まれています。

SELECT `users`.*, GROUP_CONCAT(DISTINCT `majors`.name ORDER BY `users_majors`.order) AS major, GROUP_CONCAT(DISTINCT `users_majors`.order) AS major_order 
FROM `users` 
LEFT JOIN users_majors ON (users_majors.user_id = users.id) 
LEFT JOIN majors ON (majors.id = users_majors.major_id) 
GROUP BY users.id 
+0

パーフェクト!ありがとう! – Steve