1

ユーザー、ロール、権限の3つのテーブルがあります

ユーザー

|username|lastName|firstName|....
|dan     |foo     |dan
|russ    |bar     |russ

役割

|role                 |roleLevel
|ROLE_ADMIN           | 0
|ROLE_COMPANY_ADMIN   | 20
|ROLE_MARKETING_ADMIN | 50
|ROLE_SERVICE_ADMIN   | 80
|ROLE_USER            | 100

当局

|username|authority
|dan     |ROLE_SERVICE_ADMIN  |
|dan     |ROLE_USER           |
|russ    |ROLE_MARKETING_ADMIN|
|russ    |ROLE_ADMIN          |
|russ    |ROLE_COMPANY_ADMIN  |

渡すINTよりも高いroleLevelと最も低いroleLevelを持つすべてのDISTINCTユーザーを取得する必要があります

私が今持っているのは:

SELECT DISTINCT u.username, u.firstName, u.lastName, r.roleLevel FROM AUTHORITIES a, ROLES r, USERS u
WHERE r.role =  a.authority
AND a.username = u.username 
AND r.roleLevel >= #{roleLevel} 
ORDER BY u.lastName, u.firstName

しかし、それは私に複数の役割を持つユーザーのための複数の行を与えます。渡したものよりも低いroleLevelを持つユーザーを取得するにはどうすればよいですか?

4

3 に答える 3

1

ユーザーが複数の行を持つことができると仮定すると、ロールをどのように表示するかを決定する必要があります。

SELECT DISTINCT u.username, u.firstName, u.lastName, 
    max(r.roleLevel) largestRoleLevel,
    min(r.roleLevel) minimumRoleLevel,
    GROUP_CONCAT(r.roleLevel SEPARATOR ', ') allRoleLevels
FROM USERS u
INNER JOIN AUTHORITIES a ON a.username = u.username
INNER JOIN ROLES r ON r.role = a.authority

WHERE r.roleLevel >= #{roleLevel} 
GROUP BY u.username, u.firstname, u.lastname
ORDER BY u.lastName, u.firstName
于 2011-08-21T20:39:44.973 に答える
1

最も低い値が必要であると指定していないため、複数の行が表示されます。さらに、大なり記号を使用しました。

SELECT u.username, u.firstName, u.lastName, min(r.roleLevel) minroleLevel
  FROM AUTHORITIES a, ROLES r, USERS u
 WHERE r.role =  a.authority
   AND a.username = u.username 
   AND r.roleLevel <= #{roleLevel}
 GROUP BY u.username, u.firstName, u.lastName 
 ORDER BY u.lastName, u.firstName
于 2011-08-21T20:43:14.927 に答える
0
SELECT 
    u.username, u.firstName, u.lastName, 
    min(r.roleLevel) minRoleLevel
FROM 
    authorities a 
    JOIN roles r ON r.role = a.authority
    JOIN users u ON u.username = a.username
GROUP BY 
    u.username, u.firstName, u.lastName 
HAVING 
    minRoleLevel >= #{roleLevel}
ORDER BY 
    u.lastName, u.firstName
于 2011-08-21T21:59:33.477 に答える