2012-04-23 13 views
3

在MySql數據庫我有表userMySQL的列表中的用戶和他們的組

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 

所以......紅組的成員是安娜,綠色組合的成員是喬和藍色組的成員是喬和米斧頭。

我怎樣才能得到用戶的名單和他們的羣體

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

組關鍵字,請更改表名組一些別的! – Suleman 2012-04-23 14:20:18

回答

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 
5

你可以得到它使用MySQL的GROUP_CONCAT函數來完成。請注意,這使得您的查詢非便攜式(因爲使用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 

我以爲你對錶合理的主/唯一鍵(例如,一個給定的用戶名不能在同一個被列出兩次組)。

+1

+1注意'GROUP_CONCAT'的最大長度由[group_concat_max_len](http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_group_concat_max_len)定義。它默認爲1024,但可以更改。所以如果你的數據看起來像被截斷,那就是爲什麼。 – 2012-04-23 14:20:09

+0

@MikeB:好點。雖然如果這會成爲一個問題,那麼應用程序代碼而不是數據庫IMO會更好地生成列表。 – Romain 2012-04-23 14:21:45

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; 
相關問題