Hallo,
da mir bisher leider noch keiner weiterhelfen konnte und ich denke, dass das vielleicht daran liegen könnte, dass ich mich noch nicht verständlich genug ausgedrückt habe, möchte ich es nun nochmal versuchen =)
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 Frage 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
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:
Code:
Id: 1
|
|- Id: 2
|- Id: 4
|- Id: 5
|- Id: 10
|- Id: 12
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
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
oder je einen gesamten Baum für jedes gesuchte Element, sprich
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
PS an den Mod, der meinen Post verschoben hat: Ist das wirklich ein Anfänger-Problem und damit richtig im Grundlagen-Forum? Also entweder hab ich grad Tomaten auf den Augen (dann helft mir bitte sie loszuwerden xD) oder es ist kein sooo banales Problem. Finde dazu auch nichts bei google.. vielleicht such ich aber auch einfach nur nach dem falschen..
Wäre über Hilfe wirklich sehr dankbar. =)
Gruß Simon