5

在 MySql 数据库中,我有表user

user_id | user_name
--------+----------
1       | Joe
2       | Anna
3       | Max

桌子group

group_id | group_name
---------+----------
1        | Red
2        | Blue
3        | Green

桌子group_member

group_member_id | user_id | group_id
----------------+---------+---------
1               | 1       | 2
2               | 3       | 2
3               | 1       | 3 
3               | 2       | 1

所以... 红色组的成员是 Anna,绿色组的成员是 Joe,蓝色组的成员是 Joe 和 max。

如何获取用户及其组的列表

User  | Group
------+------------
Joe   | Green, Blue
Anna  | Red
Max   | Blue 
4

3 回答 3

7

您可以使用GROUP_CONCATMySQL 的功能完成它。请注意,这会使您的查询不可移植(因为使用 MySQL 扩展):

SELECT user_name, GROUP_CONCAT(group_name)
FROM user
JOIN group_member USING (user_id)
JOIN group USING (group_id)
GROUP BY
       user_id

我假设您在表上有合理的主键/唯一键(例如,给定的用户名不能在同一组中列出两次)。

于 2012-04-23T14:14:42.870 回答
0
SELECT u.user_name, GROUP_CONCAT(g.group_name)
FROM `user` u
inner JOIN group_member gm on gm.user_id = u.user_id
inner JOIN `group` g on g.group_id = gm.group_id
group by u.user_id
于 2012-04-23T14:22:55.233 回答
0
select u.user_name as users, group_concat(g.group_name) as groups
from `user` u 
join group_member gm on gm.user_id = u.user_id
join `group` g on g.group_id = gm.group_id
group by u.user_id;
于 2012-04-26T05:39:28.193 回答