Ich habe ein Problem mit der Logik-Programmierung, aber ich denke, dass könnte eine andere Lösung viel einfacher sein, dies in einem SQL-Befehl zu tun, aber gehen wir auf das Problem.Wie ein Ordner, Unterordner in einer Datenbank implementieren
Ich habe eine Tabelle in MySQL (InnoDb) wie folgt aus:
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
Es scheint wie ein ziemlich einfach, aber ich möchte die Ordner aufzulisten, in einer Weise, dass die Unterordner dieses Ordners unten angezeigt es. Wie in jedem Datei-Repository.
Zum Beispiel:
In der Tabelle:
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
Ich will es zeigen wie folgt aus:
root
etc
apache
php
mysql
dev
hda
hda1
lib
Die Frage ist, haben eine Möglichkeit, dies durch SQL-Befehl zu tun oder in PHP?
Ich versuche, in PHP zu machen, und ich sehe keinen Weg ohne eine rekursive Funktion. Aber ich habe keinen Erfolg.
Lösung:
Da der MySQL akzeptiert keine der WITH-Klausel ist die rekursive Funktion in SQL aus dem Kasten heraus. Danke Leute.
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
möglich Duplikat [Sortierbaum mit einem materialisierten Pfad?] (Http://stackoverflow.com/questions/2797720/sorting-tree-with-a-materialized-path) – RedFilter