MySQL:可以在多个选定的行中应用OR运算符吗?

时间:2013-09-03 16:04:37

标签: mysql operators

我有三个MySQL表:usersrolespositions

users表非常明显。 roles表是一个人可能拥有的职位列表,例如janitorpresidentmanager等。roles表还有一个一长串布尔权限,例如access_basementuser_directory_access。如果角色的位值设置为false(或“0”),则该角色缺少该权限。

棘手的是用户可能有多个角色,因此他们为什么通过positions表连接,这只是userIdroleId字段的配对。因此,如果我执行如下查询:

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运算符?

谢谢!

1 个答案:

答案 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;