gpt4 book ai didi

php - 如何在数据库中实现文件夹,子文件夹

转载 作者:可可西里 更新时间:2023-11-01 08:21:04 25 4
gpt4 key购买 nike

我在逻辑编程方面遇到了问题,但我认为这可能是另一种更容易在 SQL 命令中执行此操作的解决方案,但是,让我们开始解决这个问题。

我在 MySQL (InnoDb) 中有一个这样的表:

CREATE TABLE IF NOT EXISTS `folder` (
`id` INT NOT NULL AUTO_INCREMENT ,
`folder_id` INT NOT NULL ,
`name` VARCHAR(100) NULL ,
`hidden` TINYINT(1) NOT NULL DEFAULT 0 ,
PRIMARY KEY (`id`) ,
INDEX `fk_folder_folder1` (`folder_id` ASC) ,
CONSTRAINT `fk_folder_folder1`
FOREIGN KEY (`folder_id` )
REFERENCES `folder` (`id` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB

这看起来很简单,但我想列出文件夹,使该文件夹的子文件夹显示在其下方。就像在任何文件存储库中一样。

例如:
在表中:

id  name    folder_id
1 root 1
2 etc 1
3 dev 1
4 apache 2
5 php 2
6 mysql 2
7 hda 3
8 hda1 3
9 lib 1

我想这样显示:

root
etc
apache
php
mysql
dev
hda
hda1
lib

问题是,有办法通过 SQL 命令或在 PHP 中执行此操作吗?
我在 PHP 中尝试 make,但我没有看到没有递归函数的方法。但是我没有成功。

解决方案:
因为 MySQL 不接受 WITH 子句,所以 SQL 中的递归函数是开箱即用的。多谢你们。

SELECT c2.name
FROM folder c1 LEFT OUTER JOIN folder c2
ON c2.folder_id = c1.id WHERE c2.folder_id = 1 // the id of the parent folder
AND c2.id != c2.folder_id // Remove the parent folder
ORDER BY c2.folder ASC

最佳答案

你有实现 SQL anti pattern 的危险称为幼稚树。看这本书的pdf,它展示了几个很好的解决方案。

关于php - 如何在数据库中实现文件夹,子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10033290/

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