0

我正在努力如何在 MySQL 中创建 VIEW。我有 5 张桌子:

- 用户 - 包含用户数据的表
- 组 - 包含组数据的表
- group_membership - 将用户成员资格存储在组中的关系表
- pages - 存储所有页面数据的表
- 权限 - 页面和组之间的关系表,存储按组查看页面的权限。

我要创建的视图应该根据用户在组中的成员身份向我显示允许用户查看哪些页面。例子:

用户 ID 1,在组 1、2、3 中
第 1 组有权访问第 1、2、3 页
第 2 组有权访问第 1、2、3、4 页
第 3 组有权访问第 1、2、3、4、5、6、7 页

我如何创建将包含数据的视图

用户 ID | page_ID
--------------------
1 | 1
1 | 2
1 | 3
1 | 4
1 | 5
1 | 6
1 | 7

感谢所有可以提供帮助的人。

4

2 回答 2

0

这将做你想要的。

CREATE OR REPLACE VIEW `user_permissions` AS
SELECT DISTINCT `gm`.`user_ID`, `p`.`page_ID`
FROM `group_memberships` AS `gm`
INNER JOIN `permissions` AS `p` ON `gm`.`group_ID` = `p`.`group_ID`;

但是,您将在此过程中失去索引,并且您的性能将低于标准。

将其作为存储过程或只是一个普通查询可能会更好,例如:

SELECT DISTINCT `p`.`page_ID`
FROM `group_memberships` AS `gm`
INNER JOIN `permissions` AS `p` ON `gm`.`group_ID` = `p`.`group_ID`;
WHERE `gm`.`user_ID` = 123;
于 2013-04-24T00:39:44.453 回答
0

像这样的东西应该可以工作:

CREATE OR REPLACE VIEW `user_permission_view` AS
SELECT g.user_ID, p.page_ID
FROM group_membership g
JOIN permissions p ON p.group_ID = g.group_ID
GROUP BY g.user_ID, p.page_ID
于 2013-04-24T00:42:13.990 回答