我有一个PHP / MySQL应用程序,我有用户,组和权限:
以下是我的实体表:
user_e:
group_e:
right_e:
我的关联表:
user_group_a:
user_right_a:
group_right_a:
到现在为止它非常直接,没有什么是真正原创的。 我的问题是我想要一个查询,可以“获取授予给定ID用户或用户所属组的任何用户的不同权限”。或者以另一种方式表达:“给定用户权利与其团体权利的(不同)联合”
例如:
然后,用户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,而它应该返回几行。
此查询有什么问题?
感谢您的帮助:)
编辑:HERE是数据:http://www.fileden.com/files/2007/8/1/1314138/test.sql(由phpmyadmin导出)
答案 0 :(得分:2)
这应该可以解决问题:
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