Nested sets ist gut, aber nicht für alle hieraischen Tiefenstrukturen zu gebrauchen. Es wird mehrfach darauf hingewiesen, das es auch hier Vor- und Nachteile gibt. Der größte Nachteil ist eine ständige Änderung an der Struktur bei nicht konstanten Kind und Knotenelementen. Manchmal sind die Gegebenheiten nicht zu Ändern, auch wenn man es schöner machen möchte und nicht kann oder darf.
Hier die Lösung hinsichtlich deiner Vorlage: GETESTET !
Code:
SELECT
p.c_id,
p.p_id,
c_name,
p.c_id AS sequence
FROM
cat AS p,
cat_d
WHERE
p.p_id = 0 and p.c_id = cat_d.c_id
UNION
(SELECT
t.c_id,
t.p_id,
c_name,
t.p_id AS sequence
FROM
cat AS t,
cat_d
WHERE
t.p_id <> 0 and t.c_id = cat_d.c_id)
ORDER BY
sequence,
c_name,
p_id
Nested sets ist gut, aber nicht für alle hieraischen Tiefenstrukturen zu gebrauchen. Es wird mehrfach darauf hingewiesen, das es auch hier Vor- und Nachteile gibt. Der größte Nachteil ist eine ständige Änderung an der Struktur bei nicht konstanten Kind und Knotenelementen. Manchmal sind die Gegebenheiten nicht zu Ändern, auch wenn man es schöner machen möchte und nicht kann oder darf.
Ich denke ja auch so wie Meikel aber wenn es manchmal nicht geht, dann geht es nicht. Wenn es meins wäre wäre ich sofort auf Nested Sets aufgesprungen, aber ist nicht so !
Zu deiner Abfrage soweit ok nur bekomme ich jetzt kommischerweise folgende Ansicht im Anhang. Was bedeutet das er bei 6 Kategorien 12 ausgibt!
WOW!!!!
Du hattes recht irgendwie haben sich die leeren Kategorien in die DB geschlichen!
Danke an Sjard und Meikel jetzt geht es
Die Blumen bei Sjard abgeben. Der hat sich die Mühe, für die ich zu faul war/bin/bleiben werde.
eleven, wenn Du mal Zeit hat, dann übetrage das Beispiel mal in einen nested sets Baum.
Beachte bei den Links die Seiten von Arne Klempert. Der hatte früher sogar mal ne Klicki-Anwendung auf seinen Seiten, mit der man Elemente erstellen, verschieben und löschen konnte. Zum optische Ah gabs auch gleich die entsprechenden SQL Strings.
KA, obs das heute noch gibt: bei PEAR gabs mal ein tree menu auf nested sets Basis + Javascript zum Auf- und Zuklappen der Äste.
@meikel
Werde ich tun wenn mal die Zeit da ist, und das Projekt von mir begonnen wird!
Ich weiss jetzt gar nicht ob es jetzt hier hereinpasst ich frage jetzt trotzdem mal, hat irgendjemand ne Idee wie ich die hierarische Struktur mit einrückungen darstellen kann, das ganze wird in einer while schleife dargestellt. Mir gehen aber jetzt die Ideen aus wie ich nach dem Hauptkategorie punkt eine einrückung erzeuge bzw. in den tieferen Strukturen dementsprechend mehr einrückungen.
Erweitern wir also unsere Abfrage und nutzen dafür einen weiteren logischen Zusammenhang: "LFT und RGT aller Nachfahren liegen zwischen den LFT- und RGT-Werten der Vorfahren".
Code:
SELECT n.name,
COUNT(*)-1 AS level
FROM tree AS n,
tree AS p
WHERE n.lft BETWEEN p.lft AND p.rgt
GROUP BY n.lft
ORDER BY n.lft;