2012-04-10 15 views
6

問題:生のIDフィールドではなく、結合された答えを作成したい場合を除いて、意図したとおりに動作するGROUP_CONCATクエリがあります。内部結合をmySQL GROUP_CONCAT文に追加

現在のクエリ:

SELECT user.user_id, user.user, GROUP_CONCAT(user_roles.roleID separator ', ') roles 
FROM user 
JOIN user_roles ON user.user_ID = user_roles.user_ID 
GROUP BY users.user_ID, users.user 

は結果を与える:

+----------+---------+----------------------------+ 
| user_ID | user | roles     | 
+----------+---------+----------------------------+ 
|  1 | Smith | 1, 3     | 
+----------+---------+----------------------------+ 
|  2 | Jones | 1, 2, 3     | 
+----------+---------+----------------------------+ 

望ましい結果:

+----------+---------+----------------------------+ 
| user_ID | user | roles     | 
+----------+---------+----------------------------+ 
|  1 | Smith | Admin, Other   | 
+----------+---------+----------------------------+ 
|  2 | Jones | Admin, Staff, Other  | 
+----------+---------+----------------------------+ 

Userテーブル:

+----------+---------+ 
| user_ID | user | 
+----------+---------+ 
|  1 | Smith | 
+----------+---------+ 
|  2 | Jones | 
+----------+---------+ 

*がテーブルをusers_roles:*

+----------+---------+ 
| user_ID | role_ID | 
+----------+---------+ 
|  1 | 1  | 
+----------+---------+ 
|  2 | 1  | 
+----------+---------+ 
|  2 | 2  | 
+----------+---------+ 
|  2 | 3  | 
+----------+---------+ 
|  1 | 3  | 
+----------+---------+ 

役割テーブル:

+----------+-----------+ 
| role_ID | role_name | 
+----------+-----------+ 
|  1 | Admin | 
+----------+-----------+ 
|  2 | Staff | 
+----------+-----------+ 
|  3 | Other | 
+----------+-----------+ 

答えて

15

次のクエリ

SELECT user.user_id, user.user, GROUP_CONCAT(roles.role_name separator ', ') roles 
FROM user 
JOIN user_roles ON user.user_ID = user_roles.user_ID 
JOIN roles ON user_roles.role_ID= user_roles.role_ID 
GROUP BY users.user_ID, users.user 
+0

THAを試してみてくださいnks Vikram - これは動作します – Laurence