phpbar.de logo

Mailinglisten-Archive

AW: [php] Baum-Darstellung

AW: [php] Baum-Darstellung

Tim Hildebrandt TConnect at gmx.net
Fre Mar 26 18:18:26 CET 2004


Hallo René,

ich habe den Thread gerade erst gelesen und möchte Dir noch einen kleinen
Hinweis mit auf den Weg geben. Die Generierung des Typ 1 hat bei mir total
lange gedauert. Wahrscheinlich hast Du die Funktion rekursiv aufgerufen, was
bei einzelnen Zugriffen ja noch funtktioniert. Aber wenn dann mehrere
Personen sehr oft auf den Server zugreifen, dann gibt's da durchaus mal
Probleme mit der Performance (was sich ja schon angedeutet hat). 

Vielleicht sollte man folgende Dinge überlegen:

1. ist es machbar, die Abfragen rekursiv auszuführen?
2. muß immer der gesamte Baum geladen werden oder reicht es, einen Knoten
weiter zu verfolgen?

Ich habe dazu folgende mögliche Antworten:

zu 1. Ja, jedenfalls begrenzt.
zu 2. Nein, Baum nur an den jeweiligen Knoten öffnen und nicht immer alles
laden.

Mittels dieser Überlegungen begrenzt Du die Anzahl der SQL-Queries auf
maximal die Ebenentiefe. Ich denke, da man nicht soooo oft über Ebenentiefe
5 kommt, sollte der Server das auch bei vielen Zugriffen verpacken.
Andererseits verfolgt der Nutzer immer nur den Weg in die Ebenentiefe
abwärts, den er mittels der jeweiligen (+) Knoten geöffnet hat. Andere
Ebenentiefen woanders interessieren ihn nicht. 

Meines Erachtens kannst Du Deinen Baum also durch zwei Koordinaten
erstellen: Den Pfad und den Layer. Beispiel:

path                         layer
----------------------------|----------
Personen                     0
Personen/Meier               1
Personen/Müller              1
Personen/Müller/Schuhgröße   2
Personen/Müller/Augenfarbe   3

Die Ebenentiefe ergibt sich bildlich aus der Anzehl der / Slashes. Die
jeweils nächst tiefere Ebene erreichst Du in der Query also immer durch den
jeweils aktuellen Pfad selbst in Verbindung mit dessen count der
split-Funktion. Angenommen, Du wolltest die Ebene unterhalb von
Person/Müller haben, dann wäre die Query:

$q = "SELECT * FROM tabelle WHERE path like '" . $path . "%' AND layer = " .
count(split("/", $path));

Und wenn man jetzt immer nur den jeweiligen Weg nach unten in der Ebene
verfolgt, der gerade via (+) geöffnet wird, dann schnurrt das ganze... und
zwar schnell wie Schmidt's Katze...

Ich hoffe, ich konnte was beitragen.

Grüße Tim


php::bar PHP Wiki   -   Listenarchive