我有5张表,只需要其中4张就可以得到我想要的结果。这些表是:
--------------
| Roles |
--------------
| ID | NAME |
--------------
| 1 | Admin |
--------------
| 2 | User |
--------------
-------------
| USERS |
-------------
| ID | NAME |
-------------
| 1 | Dan |
-------------
| 2 | Dave |
-------------
| 3 | Mike |
-------------
--------------------------------
| navigation |
--------------------------------
| ID | navlinks |
--------------------------------
| 1 | Home |
--------------------------------
| 2 | Admin Page |
--------------------------------
用于分配用户角色的表
--------------------------
| user_roles |
--------------------------
| ID | user_id | role_id |
--------------------------
| 1 | 1 | 1 |
--------------------------
| 2 | 2 | 2 |
--------------------------
| 3 | 3 | 1 |
--------------------------
用于将允许的 user_roles 分配给每个导航导航链接的表
----------------------------------
| navigation_roles |
----------------------------------
| ID | navigation_id | user_role |
----------------------------------
| 1 | 1 | 1 |
----------------------------------
| 2 | 1 | 2 |
----------------------------------
| 3 | 2 | 1 |
----------------------------------
我希望能够获取允许每个用户访问的 user.name
列和 navigation.navigation_name
列。
Dan 和 Dave 应显示“管理”和“主页”链接,而 Mike 只能看到“主页”。但我的解决方案仅显示 Dave 的管理员和主页,而 Dan 只具有主页链接,而他也应该显示管理员链接。
select users.name, navigation.navlinks FROM users
LEFT JOIN user_roles on users.id = user_roles.user_id
LEFT JOIN navigation_roles ON navigation_roles.role_id = user_roles.role_id
RIGHT JOIN navigation on navigation.id = navigation_roles.navigation_id;
上面的内容告诉我:
----------------
| Dan | Home |
----------------
| Dave | Home |
----------------
| Mike | Home |
----------------
| Dave | Admin |
----------------
什么时候应该向我展示:
----------------
| Dan | Home |
----------------
| Dave | Home |
----------------
| Mike | Home |
----------------
| Dave | Admin |
----------------
| Dan | Admin |
----------------
最佳答案
问题出在 navigation_roles 表中的 role_id 值。
关于php - 在处理用户权限时,如何根据 SQL 表中的值获取所有可能的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45425575/