我有三个 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
所有行的逻辑操作结合起来,生成如下表:
+---------+-----------------+-----------------------+
| name | basement_access | user_directory_access |
+---------+-----------------+-----------------------+
| Bob | true | true |
+---------+-----------------+-----------------------+
所以问题是:是否可以在多个选定的 MySQL 行中应用 OR 运算符?
谢谢!