gpt4 book ai didi

mysql - SQL - 为什么我的查询不起作用?

转载 作者:行者123 更新时间:2023-11-29 08:31:20 25 4
gpt4 key购买 nike

我有一个 PHP/MySQL 应用程序,其中有用户、组和权限:

  • 每个用户可以属于 0..N 个组
  • 每个组可以有 0..N 个用户
  • 每个用户可以拥有 0..N 个权限
  • 每项权限可以授予 0..N 个用户
  • 每个组可以拥有 0..N 个权限
  • 每个权限可以授予0,N个组

这是我的实体表:

用户_e:

  • ID
  • 登录
  • 密码
  • 等等...

组_e:

  • ID
  • 标签

右_e:

  • ID
  • 标签

还有我的关联表:

用户组_a:

  • userId 引用 user_e.id
  • groupId 引用 group_e.id

用户权限:

  • userId 引用 user_e.id
  • rightId 引用 right_e.id

group_right_a:

  • groupId 引用 group_e.id
  • rightId 引用 right_e.id

到目前为止,它都非常简单,没有什么真正原创的。我的问题是我想要一个查询,该查询可以“获取授予给定 ID 的用户或该用户所属的任何组的不同权限”。或者换句话说:“给定用户的权利和他的组的权利的(不同的)联合)

例如:

  • 组 1 拥有权利 1 和 2
  • 组 2 拥有权利 6 和 7
  • 用户 1 属于组 1 和组 2
  • 用户 1 拥有权限 2、3 和 4

然后用户 1 拥有权限 1 和 2(来自组 1)、6 和 7(来自组 2)以及 2、3、4(来自他自己)。所以最终查询必须返回权限1,2,3,4,6,7

到目前为止我有以下查询:

SELECT DISTINCT R.*
FROM user_e U
LEFT JOIN user_right_a UR
ON U.id = UR.userid
LEFT JOIN right_e R
ON R.id = UR.rightid
LEFT JOIN user_group_a UG
ON U.id = UG.userid
LEFT JOIN group_right_a GR
ON UG.groupid = GR.groupid
AND R.id = GR.rightid
WHERE U.id = 1

但是当我在测试数据库中运行它时,我已经放置了一些测试数据(如果需要,我可以提供),它会返回一个权利,所有属性(id,标签)设置为 NULL,而它应该返回几行。

这个查询有什么问题?

感谢您的帮助:)

编辑:这里是数据:http://www.fileden.com/files/2007/8/1/1314138/test.sql (由phpmyadmin导出)

最佳答案

这应该可以解决问题:

select distinct united.rightid
from (
select UR.userid userid, UR.rightid rightid
from user_right_a UR
where UR.userid=1

union

select UG.userid userid, GR.rightid rightid
from user_group_a UG
join group_right_a GR on UG.groupid=GR.groupid
) united
where united.userid=1

关于mysql - SQL - 为什么我的查询不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16507743/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com