私はロジックプログラミングに問題がありますが、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
が重複する可能性を見てみましょう[マテリアライズド・パスでツリーをソートする?](http://stackoverflow.com/questions/2797720/sorting-tree-with-a-materialized-path) – RedFilter