2

MySQL に 3 つの異なるテーブルがあります。

ユーザーIDが与えられた場合、このユーザーのロール名のリストを取得するにはどうすればよいですか? たとえば、user_id = 1 のようなリストが必要です (1, deleteuser, modifyuser, viewuser)

このようなリストを取得する SQL コマンドを作成するにはどうすればよいですか?

4

3 に答える 3

2

JOIN3つのテーブルは次のようになります:

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

SQL フィドルのデモ

于 2012-11-08T07:42:08.190 に答える
1
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
于 2012-11-08T07:42:08.540 に答える
0

これを試して:

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;
于 2012-11-08T07:51:16.230 に答える