Jump to content
Sign in to follow this  
kenny

'Parents' in einem Nested Set auslesen

Recommended Posts

Hallo zusammen.

Ich hab mich mit diesem Tutorial mal an Nested Sets gewagt.

Habe folgendes Problem..

Wie kann ich aus folgendem Baum, den Pfad zu z.B. den Halbaffen auslesen?

Also als Ergebniss will ich die Datensätze Säugetiere, Primaten, Halbaffen in dieser reihenfolge erhalten. WIe muss die Query dafür aussehen.


Hier der Beispielbaum:

abb3.png


Hoffe ich habe die Frage halbwegs verständlich gestellt.

Danke schonmal

Share this post


Link to post
Share on other sites
Guest

Erstmal danke ich dir dafür, dass Du ein interessantes Thema in einer adäquaten Form ansprichst. Das ist hier nicht selbstverständlich.


Wie kann ich aus folgendem Baum, den Pfad zu z.B. den Halbaffen auslesen?

Das beantwortet Arne, den ich übrigens sehr schätze, in seinem Beitrag unter dem Unterpunkt Blick auf Teilbäume.


Kris bietet ebenfalls eine gute Einführung in das Thema.


In einem Live-Szenario sollte man sowas aber nur einsetzen, wenn man häufig lesend zugreifen will. Die Schreib-Performance ist deutlich schlechter. Für einfache Verschachtelungen, bsp. bei Menüs, ist ein Nested Set aber deutlich übertrieben.

Share this post


Link to post
Share on other sites

Vielen Dank für deine Antwort... So weit war ich in dem Tutorial noch garnicht. Habe irgendwie gedacht, im unteren Teil kommt nur noch löschen und einfügen von Knoten.

Im Prinzip, geht es mir erstmal nur ums verstehen der Materie. Wie, und wo ich das ganze überall einsetze, bleibt abzuwarten.

Im Moment stell ich gerade mein Gallerie Script auf ein Nested Set um. Bin recht begeistert. Ich spare ungefähr die Hälfte meiner Querys. Schreib-performance, ist in diesem Falle ja kaum wichtig (ich füge nur alle paar Wochen eine neue Gallerie hinzu. Und auch bisher nur Ich).

Ein Problem habe ich jedoch noch. Und das kann ich mir so garnicht erklären.


kleiner Ausschnitt meiner DB:

 

id          Name          lft          rgt
----------------------------------------------
1           Übersicht      1            80
....
8           GallerieX     12            13
....

 

die query:

SELECT p. *
FROM pi_cat n, pi_cat p
WHERE n.lft
BETWEEN p.lft
AND p.rgt
AND n.id =8
ORDER BY n.lft

 

liefert jetzt dieses ergebniss:

id          Name          lft          rgt
----------------------------------------------
8           GallerieX     12            13
1           Übersicht      1            80

 

Warum ist die reihenfolge falsch? In meiner Query heißt es doch extra "ORDER BY n.lft". Warum kommt die Übersicht nicht zuerst? Bug?Oder verpeil ich was?

Auch wenn ich das ganze mit Gallerien mache, die Tiefer im Baum liegen... Das Ergebniss ist komplett richtig. Nur die Übersicht wird hinten dran gehängt...anstatt, dass sie am Anfang kommt.

Share this post


Link to post
Share on other sites

und das nächste Problem :-(


Immer noch dieser Baum als Beispiel:

tab1.png


oder halt als Baum:

abb3.png



Im Tutorial, ist der Ausgabe von Teilbäumen zwar sehr gut beschrieben. Jedoch möchte ich alles ausgeben, was nur eine Ebene tiefer liegt.

Beispiel:

Ich Bin in der Ebene von ID1 (also quasi an der Wurzel) meine Query soll mir jetzt aber nicht alle Untergeordneten Knoten/Blätter liefern. Sondern nur die, die eine Ebene tiefer liegen. In diesem Beispiel also Primaten und Nagetiere.

Ich hab nicht so wirklich eine Idee wie ich das hinbekommen soll.Im Beispiel gibt es nur eine Query für alle "Kinder" Knoten, die beliebig viele Ebenen tiefer liegen.

Ich tue mich auch ein bischen schwer mit dne querys aus dem Tutorial.


Danke für deine hilfe.

Share this post


Link to post
Share on other sites

so weit, war ich auch schon ;-)

standard ist aber aufwärts... also ASC.



Auch wenn ich das ganze mit Gallerien mache, die Tiefer im Baum liegen... Das Ergebniss ist komplett richtig. Nur die Übersicht wird hinten dran gehängt...anstatt, dass sie am Anfang kommt.



Damit wollte ich verdeutlichen, das auch wenn ich z.B. 10 Ergebnisse bekomme... alle richtig nach "lft" aufwärts sortiert werden, nur lft=1 komischerweise am schluss kommt.

Habe das ganze jetzt so gelöst, das ich das Ergebniss in einem Array speicher, was ich dann mit php halt nochmal sortiere.

Viel größer ist eigentlich mein 2tes Problem (letzter Post).

Share this post


Link to post
Share on other sites
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...