2012-01-15 2 views
0

가입 (또는 사용자 역할이없는 경우에는 아무 것도 표시되지 않습니다.) 역할 정보는 두 개의 추가 테이블에서 제공됩니다.MySQL의 그룹 CONCAT 내가 모든 값을하고자하는 사용자 테이블을, 그래서이 쿼리를

첫 번째 테이블에는 다음 두 값이 있습니다. userid, roleid 두 번째 테이블에는 roleid와 role_name이 포함됩니다.

따라서 그룹 concat은 table1의 roleid를 기반으로 모든 역할 이름을 가져와야합니다.

나는 여러 가지 방법으로이 작업을 시도했지만 성공하지 못했습니다. 동일한 롤 이름을 여러 번 사용하여 하나의 결과 만 얻거나 전혀 결과를 얻을 수 없습니다. 당신의 도움이

마이클

답변

2

업데이트에 대한

감사합니다 : 어떤 역할을 가진 사용자를위한 LEFT JOIN을 추가했습니다. MySQL은 전체의 SELECT 목록에 표시보다 적은 컬럼에 GROUP BY을 허용하지만, 다른 RDBMS에서 당신이 GROUP BY에서이를 명시 적으로 tbl_user의 열을 나열 할 필요 포함 할 것, 또는 할 것을

SELECT 
    tbl_user.*, 
    GROUP_CONCAT(role_name) AS roles 
FROM 
    tbl_user LEFT JOIN tbl_roles ON tbl_user.userid = tbl_roles.userid 
    JOIN tbl_rolenames ON tbl_roles.roleid = tbl_rolenames.roleid 
GROUP BY tbl_user.userid 

tbl_user에 대한 자체 조인을 추가하여 해당 테이블의 나머지 열을 가져옵니다. 같은

뭔가 :

SELECT 
    urole.userid, 
    uall.username, 
    uall.name, 
    uall.othercols, 
    urole.roles 
FROM 
    tbl_user uall JOIN (
    SELECT 
    tbl_user.userid, 
    GROUP_CONCAT(role_name) AS roles 
    FROM 
    tbl_user LEFT JOIN tbl_roles ON tbl_user.userid = tbl_roles.roleid 
    JOIN tbl_rolenames ON tbl_roles.roleid = tbl_rolenames.roleid 
    GROUP BY tbl_user.userid 
) urole ON uall.userid = urole.userid 
+0

@Michael 프레이 나는 이미 그것을 갱신됩니다'LEFT JOIN'와 함께 그 문제를 해결하기 위해. –

+0

그냥 왼쪽 결합 버전을 시도했지만 여전히 역할이 할당 된 사용자 만 반환합니다. (두 번째 선택을 지금 시도) –

+0

8 번 줄에서 uall이 무엇을 의미하는지/설명 할 수 있습니까? 그것은 join (select)의 결과에 주어진 이름입니까? –