gpt4 book ai didi

sql - MySQL:创建访问系统的最佳方式是什么?

转载 作者:行者123 更新时间:2023-11-29 02:37:10 25 4
gpt4 key购买 nike

我有一个名为 page 的表,它代表我网站中的每个页面。

page_id | page_subject | page_path
----------------------------------
1 | Foo | /Foo
2 | Bar | /Bar

我还有一个名为 group 的表:

group_id | group_name
---------------------
1 | Users
2 | Admins

目标:如何定义单个组对每个页面的访问权限?我确实创建了另一个表 - page_group:

page_group | group_id
---------------------
1 | 1
1 | 2

表包含有权访问页面的组 (page_group)。

我写了函数:

CREATE FUNCTION `PAGE_ACCESS`(`pageId` INT, `groupId` MEDIUMINT)
BEGIN
RETURN IF((SELECT COUNT(*) FROM `page_group` WHERE page_id = pageId AND group_id = groupId) > TRUE, FALSE);
END;

现在我可以做类似的事情了:

SELECT * 
FROM page
WHERE <conditions> AND PAGE_ACCESS(page_id, <group_id>)

...返回我应该有权访问的页面。

工作正常,但行数 > 100,000 时似乎很慢你会怎么做?你会以不同的方式做到这一点吗?

最佳答案

尝试:

SELECT * 
from Page p
WHERE EXISTS (SELECT 1 from page_group pg join group g
on (pg.group_id = g.groupidId)
WHERE g.group_id = <groupId>
AND p.page_id = pg.page_id)

您也可以尝试(刚刚意识到不需要组表):

SELECT * 
from Page p
WHERE p.page_id IN (Select page_id
from page_group pg
WHERE pg.group_id = <group_id>)

甚至:

SELECT p.* 
from Page p JOIN page_group pg ON (p.page_id = pg.page_id)
WHERE pg.group_id = <group_id>

关于sql - MySQL:创建访问系统的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3511100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com