2011-02-26 4 views
0

테이블을 가지고 작업하고 있습니다. 그림의 경우 :반환 값의 모든 값을 포함한 MySQL 조인

mysql> SELECT users.id, username, REPLACE(selected_groups, '\r', ', '), groups.id, groups.label FROM users LEFT JOIN groups ON users.selected_groups; 
+----+------------------------+--------------------------------------+------+---------------+ 
| id | username    | REPLACE(selected_groups, '\r', ', ') | id | label   | 
+----+------------------------+--------------------------------------+------+---------------+ 
| 7 | Greg     | 1, 2, 3,        | 1 | Administrator | 
| 7 | Greg     | 1, 2, 3,        | 2 | Member  | 
| 7 | Greg     | 1, 2, 3,        | 3 | Banned  | 
| 8 | Steve     | 1, 2,        | 1 | Administrator | 
| 8 | Steve     | 1, 2,        | 2 | Member  | 
| 8 | Steve     | 1, 2,        | 3 | Banned  | 
| 9 | Steve The Banned Admin | 1, 3,        | 1 | Administrator | 
| 9 | Steve The Banned Admin | 1, 3,        | 2 | Member  | 
| 9 | Steve The Banned Admin | 1, 3,        | 3 | Banned  | 
| 10 | Example man   | 1, 2, 3,        | 1 | Administrator | 
| 10 | Example man   | 1, 2, 3,        | 2 | Member  | 
| 10 | Example man   | 1, 2, 3,        | 3 | Banned  | 
+----+------------------------+--------------------------------------+------+---------------+ 
12 rows in set (0.00 sec) 

사용자 테이블과 그룹 테이블이 있습니다. users 테이블에는 'selected_groups'열이 있는데,이 그룹 안에서 관련 그룹은 반환 값 ('\ r')을 사용하여 정의됩니다.

문제는 라벨 필드에 필요한 각 라벨을 어떻게 반환 할 수 있는지에 대해 잘 모르겠습니다. 결과물은 이상적으로 다음과 같을 것입니다 :

+----+------------------------+--------------------------------------+------+-------------------------------+ 
| id | username    | REPLACE(selected_groups, '\r', ', ') | id | groups.label     | 
+----+------------------------+--------------------------------------+------+-------------------------------+ 
| 7 | Greg     | 1, 2, 3,        | 1 | Administrator, Member, Banned | 
| 8 | Steve     | 1, 2,        | 1 | Administrator, Member   | 
| 9 | Steve The Banned Admin | 1, 3,        | 1 | Administrator, Banned   | 
| 10 | Example man   | 1, 2, 3,        | 1 | Administrator, Member, Banned | 
+----+------------------------+--------------------------------------+------+-------------------------------+ 

이것이 가능한가요? 그렇다면 누군가에게 나에게 도움이되는 조언이나 해결책이 있습니까?

많은 감사, 리키

답변

1

당신은 group_concat 살펴 있어야합니다.

사용자 ID 및 사용자 이름에 group by 절이 있고 레이블에 group_concat 절이 있으면 트릭을 수행해야합니다.

편집 (그래서 어쩌면 일부 수정이 필요합니다,이 테스트되지 않음)

SELECT users.id, username, REPLACE(selected_groups, '\r', ', '), GROUP_CONCAT(DISTINCT groups.label) 
FROM users 
LEFT JOIN groups ON users.selected_groups; 
GROUP BY users.id, username 

:

내가 좋아하는 뭔가를 생각하고 나는 쿼리의 groups.id를 제거, 그 이후 어떤 의미가 없습니다.

+0

나는 이런 식으로 작동하지 않을 것 같습니다. 이 인스턴스에서 group_concat이하는 것처럼 보이는 것은 각 사용자가 selected_groups 필드에서 1 \ r2 \ r3 \ r을 (있는 것처럼 각 사용자에 대한 그룹 레이블 모두를 반환하는 것입니다. –

+0

이상한, 그것은 작동해야합니다 ... 나는 다음 시간에 mysql 서버에 액세스하지 못했지만 나중에 확인하겠습니다. – krtek