繁体   English   中英

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

[英]SQL - Why isn't my query working?

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

  • 每个用户可以在0..N组中
  • 每个组可以有0..N个用户
  • 每个用户都可以拥有0..N权限
  • 每个权限都可以授予0..N用户
  • 每个组可以拥有0..N权限
  • 每个权利都可以授予0,N组

这是我的实体表:

user_e:

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

group_e:

  • ID
  • 标签

right_e:

  • ID
  • 标签

我的关联表:

user_group_a:

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

user_right_a:

  • 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,label)设置为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM