我有一个 PHP/MySQL 应用程序,其中有用户、组和权限:
- 每个用户可以在 0..N 个组中
- 每个组可以有 0..N 个用户
- 每个用户可以拥有 0..N 个权限
- 每个权限可以授予 0..N 个用户
- 每个组可以有 0..N 个权限
- 每个权限可以授予 0,N 组
这是我的实体表:
用户e:
- ID
- 登录
- 密码
- ETC...
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、标签)设置为 NULL 的权限,而它应该返回几行。
这个查询有什么问题?
谢谢你的帮助 :)
编辑:这里是数据:http ://www.fileden.com/files/2007/8/1/1314138/test.sql (由phpmyadmin导出)