我有三个MySQL表:users
,roles
和positions
。
users
表非常明显。 roles
表是一个人可能拥有的职位列表,例如janitor
,president
,manager
等。roles
表还有一个一长串布尔权限,例如access_basement
或user_directory_access
。如果角色的位值设置为false(或“0”),则该角色缺少该权限。
棘手的是用户可能有多个角色,因此他们为什么通过positions
表连接,这只是userId
和roleId
字段的配对。因此,如果我执行如下查询:
SELECT * FROM users
LEFT JOIN positions ON users.userId=positions.userId
LEFT JOIN roles ON roles.roleId=positions.roleId
WHERE users.userId=123
我可能会得到如下结果:
+---------+-----------+-----------------+-----------------------+
| name | title | basement_access | user_directory_access |
+---------+-----------+-----------------+-----------------------+
| Bob | Janitor | true | false |
+---------+-----------+-----------------+-----------------------+
| Bob | President | false | true |
+---------+-----------+-----------------+-----------------------+
由于Bob有两个角色,但每个角色具有不同的访问权限,我想将结果与MySQL查询以及所有行的逻辑OR
操作相结合,从而产生如下表格: p>
+---------+-----------------+-----------------------+
| name | basement_access | user_directory_access |
+---------+-----------------+-----------------------+
| Bob | true | true |
+---------+-----------------+-----------------------+
所以问题是:是否可以在多个选定的MySQL行中应用OR运算符?
谢谢!
答案 0 :(得分:1)
解决此问题的一种方法是使用值0和1作为角色权限。并使用一些查询:
SELECT u.name, SUM(r.basement_access) AS basement_access, SUM(r.user_directory_access) AS user_directory_access
FROM users u
LEFT JOIN positions p ON u.userId=p.userId
LEFT JOIN roles r ON r.roleId=p.roleId
WHERE u.userId=123
GROUP BY u.userId;