gpt4 book ai didi

php - 通过 1 个表的 MySQL 继承 - 权限

转载 作者:行者123 更新时间:2023-11-29 06:20:26 25 4
gpt4 key购买 nike

我在我们的 MySQL 数据库中有一个名为“文件夹”的表。它在我们的网站上为不同的用户存储虚拟文件夹的名称。结构如下:

CREATE TABLE IF NOT EXISTS `folder` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userId` int(11) NOT NULL,
`parentId` int(11) DEFAULT NULL,
`folderName` varchar(255) NOT NULL,
`isPublic` int(1) NOT NULL DEFAULT '0'
PRIMARY KEY (`id`)
);

该网站允许文件夹中有任意数量的子文件夹,因此:

Base Folder
- Child Folder 1
--- Child Folder 2
etc

每个文件夹都可以有公共(public)或私有(private)状态。所以:

Base Folder (Public)
- Child Folder 1 (Private)
--- Child Folder 2 (Private)

如果“子文件夹 1”设置为“私有(private)”,则无论子文件夹是否已在 dd 中设置为公开,它始终会导致子文件夹为私有(private)。

我的问题是,考虑到继承,如何通过 MySQL 确定特定文件夹是公共(public)文件夹还是私有(private)文件夹?

以“子文件夹2”为例。要检查它是私有(private)的还是公共(public)的,我们可以这样做:

SELECT isPublic FROM folder WHERE folderName = "Child Folder 2";

(只是一个例子,在代码中我们使用文件夹 ids :))

但这不考虑继承。所以父文件夹可能被设置为私有(private)。

知道如何遍历任意数量的父文件夹,直到找到私有(private)状态或不再有父文件夹为止。理想情况下,我需要以查询返回的 1 或 0 结尾,1 是公共(public)的,0 是私有(private)的。

提前致谢,红色。

最佳答案

这是一个可以在 MySQL 中执行此操作的简单存储过程。它有两个参数 testid 作为文件夹的 id 和 param1 用来存储结果

DELIMITER //
CREATE PROCEDURE test_public(IN testid INT,OUT param1 INT)
BEGIN
DECLARE parent,public INT DEFAULT -1;

WHILE testid!=0 DO
SELECT f.parentID,f.isPublic INTO parent,public FROM folder f WHERE f.id = testid ;
IF (parent is not NULL and public is not NULL and parent!=0 and public!=0) THEN
set testid=parent;
ELSE
set testid=0;
END IF;
END WHILE;

select public into param1;
END//
delimiter ;

/* Usage - @a will be 1 if the folder is public, 0 if it is private */
call test_public(3,@a);
select @a;

关于php - 通过 1 个表的 MySQL 继承 - 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33543639/

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