MySQL に 3 つの異なるテーブルがあります。
ユーザーIDが与えられた場合、このユーザーのロール名のリストを取得するにはどうすればよいですか? たとえば、user_id = 1 のようなリストが必要です (1, deleteuser, modifyuser, viewuser)
このようなリストを取得する SQL コマンドを作成するにはどうすればよいですか?
JOIN
3つのテーブルは次のようになります:
SELECT
u.id,
r.Name
FROM user u
INNER JOIN user_role ur ON u.id = ur.user_id
INNER JOIN roles r ON ur.Role_id = r.id
WHERE u.id = Someid
ただし、各ユーザーのロールのリストを 1 つの文字列に連結する必要がある場合。GROUP_CONCAT
次のように使用します。
SELECT
u.id,
GROUP_CONCAT(r.Name) roles
FROM user u
INNER JOIN user_role ur ON u.id = ur.user_id
INNER JOIN role r ON ur.Role_id = r.id
WHERE u.id = 1
GROUP BY u.id
SELECT User_id, Name
FROM User_role
JOIN Role ON User_role.Role_id = Role.Id
WHERE User_id = '1'
次のようなリストが作成されます。
User_id | Name
1 | DeleteUser
1 | ModifyUser
1 | ViewUser
これを試して:
SELECT User_id, GROUP_CONCAT(r.Name)
FROM User_Role ur
INNER JOIN Role r ON ur.Role_id = r.Role_id
GROUP BY User_id;