2012-04-10 61 views
6

问题:我有一个GROUP_CONCAT查询按预期工作,但我想使concat成为联接答案,而不是原始ID字段。添加一个内部连接到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_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

塔维克拉姆 - 这个工程 – Laurence 2012-04-10 07:58:04