SQLite Self Join "unbestimmter tiefe"

godi

Aktives Mitglied
Hallo,

Ich habe eine Tabelle (SQLite) in der sind Ordner gespeichert und die Parent-Ordner des Ordners.
(Die Tabelle verweist auf sich selbst)
SQL:
DROP TABLE IF EXISTS "Ordner";
CREATE TABLE "Ordner" ("OrdnerID" INTEGER PRIMARY KEY  NOT NULL , "ParentID" INTEGER NOT NULL );
INSERT INTO "Ordner" VALUES(1,10);
INSERT INTO "Ordner" VALUES(2,10);
INSERT INTO "Ordner" VALUES(3,10);
INSERT INTO "Ordner" VALUES(5,50);
INSERT INTO "Ordner" VALUES(6,50);
INSERT INTO "Ordner" VALUES(10,70);
INSERT INTO "Ordner" VALUES(50,70);
INSERT INTO "Ordner" VALUES(70,100);

Jetzt würde ich gerne die Ordner ermitteln die in der "untersten" Ebene sind.
Also vom Ordner 10 würden dies dann 1,2,3 sein, von 70: 1,2,3,5,6

Funktioniert dies mit einen Self Join?
Da ja die Ordner-Tiefe variiert bin ich noch nicht dahinter gekommen wie so etwas zu lösen geht. :bahnhof:
Wie könnte dies Funktionieren?

godi
 
Bei Bäumen die auf Parent aufbauen musst du leider einzelne Abfragen machen. Für solche Ordner Strukturen empfehlen sich Nested Sets.
 
Nested Sets sind eine Möglichkeit, eine andere wäre bessere SQL Statements zu schreiben 😉

Wenn du jetzt noch felder für die Ebene (Level) und den Index/Position hättest, könntest du einen kompletten ORdner mit einem Statement auslesen.
 
Geht doch so auch? .. oder ich hab die Frage nicht verstanden

SQL:
select ord1.ordnerID from ordner ord1 join ordner ord2 on ord1.parentID = ord2.OrdnerId
where ord1.parentID = 10;
 
Geht doch so auch? .. oder ich hab die Frage nicht verstanden

Hast du leider falsch verstanden. 😉
Wenn du in deiner Query den Wert 70 oder 100 einsetzt dann kommst du nicht mehr auf die Children in der untersten Ebene sondern nur auf die direkten Children von 70 bzw 100.




Nested Sets sind eine Möglichkeit, eine andere wäre bessere SQL Statements zu schreiben 😉

Wenn du jetzt noch felder für die Ebene (Level) und den Index/Position hättest, könntest du einen kompletten ORdner mit einem Statement auslesen.

Kannst du mir dies bitte ein wenig genauer Erklären was du unter Level und Index/Position meinst?
 

Zurück
Oben