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

つまり...RedグループのメンバーはAnna、Green gorupのメンバーはJoe、Blueグループのメンバーは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

テーブルに適切なプライマリ/一意のキーがあると仮定しました(たとえば、特定のユーザー名を同じグループに2回リストすることはできません)。

于 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 に答える