我有三个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有两个角色,但对每个角色都有不同的访问权限,所以我希望将结果与所有行的rows查询和逻辑OR操作结合起来,从而生成如下表:
+---------+-----------------+-----------------------+
| name | basement_access | user_directory_access |
+---------+-----------------+-----------------------+
| Bob | true | true |
+---------+-----------------+-----------------------+所以问题是:可以在多个选定的MySQL行中应用OR操作符吗?
谢谢!
发布于 2013-09-03 16:12:13
解决这一问题的一种方法是使用值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;https://stackoverflow.com/questions/18596777
复制相似问题