我正在尝试在MySQL中设置新的权限数据库,而我正在为确定非常简单的事情而绞尽脑汁。我敢肯定,这首歌在这里已经得到了解答,但是经过数小时的搜索,我仍然找不到任何有效的方法。
我有4个相关的表
权限(包含所有可能的权限)
|permission_name | description |
--------------------------------
|users.list | etc. etc. |
|users.update | etc. etc. |
|users.delete | etc. etc. |
用户
| id | fname | group_id |
------------------------------
| 1 | John | 1 |
| 2 | Nancy | 1 |
| 3 | Paul | 2 |
组
| group_id | group_name |
-------------------------
| 1 | Webmasters |
| 2 | Corporate |
| 3 | HR |
Group_permission(包含与每个组相关的权限)
| group_id | permission_name | permission_type (1=Y|0=not set|-1=N)
----------------------------------------------
| 1 | users.list | 1 |
| 1 | users.update | 1 |
| 2 | users.list | 1 |
好的,这么多的关系在继续,但是我试图获取特定用户的所有组权限,即使该组权限尚不存在。
我想象这是以权限表为基础的某种左联接,但是每当我包含WHERE user.id = 2时,它都会限制我的结果集,并且在右侧不包含空值。>
SELECT a.permission_name, IFNULL(b.permission_type, 0)
FROM permission a
LEFT JOIN group_permission b on b.permission_name = a.permission_name
LEFT JOIN user c on c.group_id = b.group_id
WHERE c.id = 2
我想为南希看到的结果是
|permission_name | permission_type |
------------------------------------
|users.list | 1 |
|users.update | 0 |
|users.delete | 0 |
在PHP端,我不知道用户属于哪个组,因此我只能使用用户ID进行查询。
我所得到的只是
|permission_name | permission_type |
------------------------------------
|users.list | 1 |
任何帮助表示赞赏。 TIA
答案 0 :(得分:0)
最终它只是完成此操作的子查询。
SELECT a.permission_name, IFNULL(b.permission_type, 0)
FROM permission a
NATURAL LEFT JOIN
(
SELECT a.group_id, a.permission_name, a.permission_type FROM group_permission a
NATURAL LEFT JOIN users b
WHERE b.id = 2
) as b
答案 1 :(得分:0)
不能100%确定这是否可行,但是请尝试将group_permissions表加入到权限表。
SELECT a.permission_name, IFNULL(b.permission_type, 0)
FROM group_permission a
LEFT JOIN permission b on a.permission_name = b.permission_name
LEFT JOIN user c on c.group_id = b.group_id
WHERE c.id = 2