Hallo,
wie man einen Baum aus einem Nested Set ermittelt, in dem ein bestimmtes Element vorhanden ist, weiß ich. Natürlich lässt sich das auch insofern erweitern, dass man für n gesuchte Elemente entsprechend n Bäume von Element e bis zur Wurzel ausgibt, was jedoch unsinnig viele Daten mehrfach erzeugt und die nachfolgende Verarbeitung kompliziert.
Bevor ich zu meiner konkretisierten Farge komme, eine kurze Darstellung des gesamten Baumes:
Nehmen wir nun mal an, ich möchte diesen Baum haben, jedoch nicht mit allen Elementen, sondern nur mit den Elementen 4, 5 und 12, folglich:
Wie ich diese Abfrage nun gestalten soll, entzieht sich bislang meiner Vorstellungskraft. Setze ich die gewünschten Elemente (4, 5, 12) in den Bedingungsteil der Abfrage, erhalte ich, je nach Formulierung, entweder
NUR die gesuchten Elemente, nicht jedoch deren Eltern, sprich
oder je einen gesamten Baum für jedes gesuchte Element, sprich
Gibt es hier eine (vielleicht sogar verständliche) Lösung? Die Datenbanktabelle mit Testdaten habe ich als SQL-Datei diesem Posting angehängt. Sie ist so ausgelegt, dass man am besten mit den "gewünschten Elementen" 110, 111 und 136 arbeiten kann.
Vielen Dank schon im Voraus.
pb
wie man einen Baum aus einem Nested Set ermittelt, in dem ein bestimmtes Element vorhanden ist, weiß ich. Natürlich lässt sich das auch insofern erweitern, dass man für n gesuchte Elemente entsprechend n Bäume von Element e bis zur Wurzel ausgibt, was jedoch unsinnig viele Daten mehrfach erzeugt und die nachfolgende Verarbeitung kompliziert.
Bevor ich zu meiner konkretisierten Farge komme, eine kurze Darstellung des gesamten Baumes:
Code:
Id: 1 | |- Id: 2 |- Id: 3 |- Id: 4 |- Id: 5 |- Id: 6 |- Id: 7 |- Id: 8 |- Id: 9 |- Id: 10 |- Id: 11 |- Id: 12 |- Id: 13 |- Id: 14 |- Id: 15
Code:
Id: 1 | |- Id: 2 |- Id: 4 |- Id: 5 |- Id: 10 |- Id: 12
NUR die gesuchten Elemente, nicht jedoch deren Eltern, sprich
Code:
SELECT d2.* FROM datatest d1, datatest d2 WHERE d1.lft BETWEEN d2.lft AND d2.rgt AND d2.id IN (4, 5, 12 AND d2.root_id = 1 AND d2.active = 1 AND d1.active = 1 GROUP BY d2.id ORDER BY d1.lft, d2.lft |- Id: 4 |- Id: 5 |- Id: 12
Code:
SELECT d2.* FROM datatest d1, datatest d2 WHERE d1.lft BETWEEN d2.lft AND d2.rgt AND d1.id IN (4, 5, 12) AND d2.root_id = 1 AND d2.active = 1 AND d1.active = 1 ORDER BY d1.lft, d2.lft Id: 1 | |- Id: 2 |- Id: 4 Id: 1 | |- Id: 2 |- Id: 5 Id: 1 | |- Id: 10 |- Id: 12
Vielen Dank schon im Voraus.
pb
Kommentar