2011-05-12 2 views
2

먼저 제목이 약간 떨어져 있으면 죄송합니다. 예제를 사용하여 상황을 설명하겠습니다. 내가하고 싶은 것은 끝낼 수있는 가입 쿼리를 사용하다LEFT JOIN을 한 테이블의 그룹 목록과 함께 사용하고 다른 테이블에서 플래그를 지정

 
id user_id group_id 
1 60  1 
2 60  2 
3 60  3 

:

 
id name 
1 admin 
2 developer 
3 reviewer 
4 beta tester 
5 contributor 

나는 다음 Permissions 테이블과 같이 있습니다

나는 이런 Groups 테이블이 있습니다 결과는 다음과 같습니다 :

 
(perm.) name part of group 
admin   1 
developer  1 
reviewer  1 
beta tester 0 
contributor 0 

e 특정 사용자 ID에 대한 항목이 특정 그룹 ID에 연결되어 있으면 해당 사용자가 해당 그룹에 있으므로 1이 열에 입력됩니다. 나는 이것을 사용하여 관리자 페이지의 체크 박스 목록을 출력한다.

제 질문은 간단합니다 : MySQL에서 어떻게 할 수 있습니까? 분명히 어떤 종류의 JOIN이지만, 그들은 나에게서 지옥을 혼동합니다. 어떤 도움을 주셔서 감사합니다.

제임스는

답변

3
SELECT g.Name, 
     CASE WHEN p.group_id IS NOT NULL THEN 1 ELSE 0 END AS part_of_group 
    FROM Groups g 
     LEFT JOIN Permissions p 
      ON g.id = p.group_id 
       AND p.user_id = 60 
    ORDER BY part_of_group DESC, g.Name 
+0

대단히 감사합니다. 이것은 완벽하게 작동합니다. – Bojangles

3
SELECT 
    Groups.name, 
    Permissions.id is not null 
FROM Permissions 
RIGHT JOIN Groups ON Permissions.group_id = Groups.id 
WHERE Permissions.user_id = 60 

RIGHT JOIN은 오른쪽 테이블 (즉 Groups)의 각 행에 대해 행을 의미합니다. 왼쪽 테이블의 해당 행 (예 : Permissions)이없는 경우 값으로 null으로 생성됩니다.

은 내가

조 제안한 LEFT JOIN에 대답도 완벽하게 정확 :) 분명 해요 희망,하지만 난 당신이 더 많은 조건을 추가해야하는 경우이 방법이 더 확장라고 생각합니다.

+0

대단히 감사합니다. 지금 당장은 데이터를 가져 와서 아무런 작업도 수행하지 않습니다. 나는이 쿼리를 먼저 시도했지만 작동했지만'Groups' 테이블에서 _all_ 행을 반환하지 않았습니다. 죄송 합니다만 충분히 명확하지 않습니다. @ 조의 대답은 나에게 잘 맞는다. +1하지만 :-) – Bojangles

관련 문제