Mailinglisten-Archive |
Hi, Botzenhart Stefan wrote: > Meine Frage hier ist, wie kann ich das ressourcenschonender > organisieren. Vor allem in Hinsicht auf den angesprochenen Treewalker > und den Heap-Cache. Ohne Rekursionen ist es natürlich resourcenschonender. Deshalb schlage ich Nested Sets vor (s.u.) > Gibt es da fertige Funktionen die das erledigen? > Muss ich meinen Id/Parent-id Beziehungen auf bestimmte Weise in das > Array speichern und wie kann ich solch eine Struktur performant > zwischenspeichern? Eine Lösung für deine Herausforderung ist möglich über Nested Sets. Die sind für Lesezugriff besser geeignet, du kannst das kombinieren mit den erforderlichen Berechtigungsprüfungen (z.b. sowas wie INNER JOIN rechte ON ... AND rechte.edit=1...) und erhältst über einen simplen COUNT() Befehl die Tiefe (Ebene) des jeweiligen Eintrags. Wenn man das geschickt genug kombiniert mit Order-Flags, kann man so mit einem einzelnen SQL die Gesamtstruktur direkt auslesen ohne zusätzliche Rekursion o.ä ID->ParentID dagegen sind sehr aufwändig beim Lesezugriff und deshalb für größere Strukturen (z.B. Threadansichten, mehrfach geschachtelte Strukturen, Strukturen mit Abhängigkeiten...) und zeitkritische Dinge weniger gut geeignet. Dafür haben Nested Sets halt den Nachteil des größeren Kostenaufwands beim Aufbau der Struktur. Es gibt für Menüs ansonsten aber auch Lösungen bei PEAR (HTML_TreeMenu oder so ähnlich, glaub ich). Viele Grüße -- Dennis Sterzenbach
php::bar PHP Wiki - Listenarchive