【发布时间】:2015-11-05 11:41:05
【问题描述】:
我的 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
每个文件夹都可以具有公共或私人状态。所以:
Base Folder (Public)
- Child Folder 1 (Private)
--- Child Folder 2 (Private)
如果“子文件夹 1”设置为“私有”,则无论子文件夹是否已在 dd 中设置为公共,它总是会导致子文件夹为私有。
我的问题是,考虑到继承,如何通过 MySQL 确定特定文件夹是公共文件夹还是私有文件夹?
以“子文件夹2”为例。要检查它是私有的还是公共的,我们可以这样做:
SELECT isPublic FROM folder WHERE folderName = "Child Folder 2";
(只是一个例子,在代码中我们使用文件夹 ids :))
但这并没有考虑到继承。所以父文件夹可以设置为私有。
知道如何循环遍历任意数量的父文件夹,直到找到私有状态或不再有父文件夹。理想情况下,我需要从查询返回 1 或 0,1 是公共的,0 是私有的。
提前致谢, 红色。
【问题讨论】:
-
一个简单的 SQL 查询将不起作用 - 您必须使用递归存储过程或在应用程序中完成它
标签: php mysql inheritance