2012-04-23 3 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 

그래서 ... 레드 그룹의 회원 Anna, Green gorup의 멤버는 Joe이고 Blue 그룹의 멤버는 Joe와 m입니다. 도끼.

어떻게 사용자의 목록과 그룹

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

그룹은 어떤 다른 사람에 테이블 이름의 그룹을 변경하시기 바랍니다 키워드입니다! – Suleman

답변

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이지만 변경할 수 있습니다. 따라서 데이터가 잘린 것처럼 보이면 그 이유가됩니다. –

+0

@MikeB : 좋은 지적입니다. 문제가 생기면 목록은 DB IMO보다는 응용 프로그램 코드에서 더 잘 생성됩니다. – Romain

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; 
관련 문제