am: 20. Januar 2015, 09:57:06
Eine Frage an die SQL-Cracks:
Gegeben ist folgende Tabelle:
ID - ChildID
2 - 4
4 - 3
3 - 5
6 - 8
7 - 6
Ich möchte alle kinder und Enkel einer ID erhalten. Die Abfrage dazu sieht so aus:
SELECT id, @lvl:=@lvl+1 AS 'depth', @pv:=childid AS 'childid' FROM mytable
JOIN
(SELECT @lvl:= 0, @pv:=2)tmp
WHERE id=@pv
depth ergibt die Hierarchie-Tiefe und ist später für die Priorisierung der Daten nötig.
@pv gibt den Startpunkt an.
Das Ergebnis für @pv:=2 ist korrekt.
Das Ergebnis für @pv:=7 ist falsch. Hier wird nur die letzte Zeile und depth =1 zurückgegeben.
Der Fehler liegt wohl an der Reihenfolge der Daten in der Tabelle. Gebe ich dieDaten so ein, dass die letzten beiden Datensätze die Reihenfolge tauschen ist das Ergebnis nämlich korrekt.
Zunächst die Tabelle nach ID zu sortieren führt hier nicht zum Erfolg, da id und childid nicht unbedingt in der richtigen Reihenfolge erfaßt werden, die Childid also mal großer oder kleiner als die zugehörige ID sein können.
Hat jemand eine SQL-Lösung hierfür oder ist das nur über PHP zu lösen?
Linkback: https://www.modified-shop.org/forum/index.php?topic=32023.0