首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:可以在多个选定的行中应用OR运算符吗?

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

Stack Overflow用户
提问于 2013-09-03 16:04:37
回答 1查看 83关注 0票数 1

我有三个MySQL表:users、roles和positions。

users表非常清楚。roles表是一个人可能拥有的职务列表,如janitor、president、manager等。roles表还具有很长的布尔权限数组,例如access_basement或user_directory_access。如果角色的位值设置为false (或"0"),则该角色缺乏该权限。

其棘手之处在于,用户可能有多个角色,因此它们由positions表连接,这只是userId和roleId字段的配对。因此,如果我执行如下查询:

代码语言:javascript
复制
SELECT * FROM users 
    LEFT JOIN positions ON users.userId=positions.userId
    LEFT JOIN roles ON roles.roleId=positions.roleId 
WHERE users.userId=123

我可能会得到这样的结果:

代码语言:javascript
复制
+---------+-----------+-----------------+-----------------------+
| name    | title     | basement_access | user_directory_access |
+---------+-----------+-----------------+-----------------------+
| Bob     | Janitor   | true            | false                 |
+---------+-----------+-----------------+-----------------------+
| Bob     | President | false           | true                  |
+---------+-----------+-----------------+-----------------------+

由于Bob有两个角色,但对每个角色都有不同的访问权限,所以我希望将结果与所有行的rows查询和逻辑OR操作结合起来,从而生成如下表:

代码语言:javascript
复制
+---------+-----------------+-----------------------+
| name    | basement_access | user_directory_access |
+---------+-----------------+-----------------------+
| Bob     | true            | true                  |
+---------+-----------------+-----------------------+

所以问题是:可以在多个选定的MySQL行中应用OR操作符吗?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-03 16:12:13

解决这一问题的一种方法是使用值0和1作为角色权限。并使用如下查询:

代码语言:javascript
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18596777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档