2012-01-15 15 views
0

に参加します(ユーザーの役割がない場合は何もしません)。ロール情報は、2つの追加テーブルから得られます。mysqlグループの連結は、私はすべての値を表示したいからユーザーテーブルを持っているので、私はこのクエリを持って

最初のテーブルには、次の2つの値が含まれています。userid、roleid 2番目のテーブルには、roleidとrole_nameが含まれています。

したがって、グループconcatは、table1のroleidに基づいてすべてのロール名を取得する必要があります。

私はこれを行うにはいくつかの方法を試しましたが、私は成功しません。同じロールネームの数倍の結果しか得られないか、まったく結果が得られません。あなたの助けのための

おかげ

マイケル

答えて

2

更新:なしロールを持つユーザーのためLEFT JOINを追加しました。

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 

合計でSELECTリストに表示さよりも、MySQLが少ない列にGROUP BYが許可されますが、他のRDBMSには、明示的tbl_userの列をリストし、GROUP BYに含める、または実行する必要があることに注意してください追加の自己結合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のやり方を説明できますか?それは結合(選択)の結果に与えられた名前ですか? –

関連する問題