Mailinglisten-Archive |
Hallo Norbert, Norbert Pfeiffer wrote: > man heisst ja immer, dass rekursive Querys Resourcen fressen ! > Deshalb bevorzuge ich die Variante, alles in einem Zug auszulesen > und mittels PHP mundgerecht zu machen. Und damit das auch Hand und > Fuss bekommt, habe ich Peters Loesung gegen die PHP-Variante um > die Wette laufen lassen: > - es muessen 12 Querys von MySQL beantwortet werden: 18,883 ms > - dagegen die einzelne Abfrage mit PHP-Nachbesserung: 2,514 ms > Denke, das sagt alles ! na klar, das sind knap 2 Hundertstel Vorsprung. Auf der Basis werden Weltrekorde verbessert. ;-) Nein im Ernst: Ich finde Deine Lösung ganz gut, und ich hoffe, Du hast nichts dagegen, wenn wir die verwenden? Das rekursive Prinzip, nach dem der OP gefragt hatte, ist übrigens in beiden Varianten gleich. BTW: Hast Du mal probiert, wie groß der Zeitunterschied ist, wenn Du das assoziative Array von MySQL bauen lässt? : while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $res_arr[] = $row; } (Ich hab's noch nicht probiert.) Hier ist mir nicht ganz klar, was Du damit bezweckst. Kann es sein, dass Du Dich da vertan hast? : > $maxD = ($dept > $maxD) ? $dept : $maxD; Noch eine Anmerkung zum Level (bei Dir depth.) Der lässt sich auch bei der rekursiven Ausgabe ermitteln und nutzen. Beispiel zur Ausgabe einer Sitemap: function build_sitemap ($tree , $level=1) { global $nav; //Templateobjekt $html_buffer = ''; foreach ($tree as $k => $v_arr) { $tmp = ''; //Wenn kein nächster Level da ist auf leer setzen. if (!isset($v_arr['nextlevel'])) { $v_arr['nextlevel'] = ''; } else if (is_array($v_arr['nextlevel'])) { $tmp = build_sitemap ($v_arr['nextlevel'], $level+1); } $v_arr['nextlevel'] = $tmp; $v_arr['level'] = $level; $html_buffer .= $nav->fill_tpl('links', $v_arr); } return $nav->fill_tpl ('navi', 'links', $html_buffer); } ################################################ # Template [navi] <ul>{LINKS}</ul> [links] <li><a class="level{LEVEL}" href="/{URL}">{LABEL}</a>{NEXTLEVEL}</li> # Templatklasse: #http://www.media-palette.de/tools/pb-tpl/ # Ausgabebeispiel bei etwas erweitertem Template: # http://www.media-palette.de/test/sitemap1.html ################################################## Übrigens ist es eine gute Idee das Navigationsarray zu serialisieren und speichern, falls sich nicht ständig etwas ändert: save_string(serialize($navi_tree), $navifile); Dann ist es fast egal, ob man rekursiv die DB abfragt. (z.B. einmal im Monat. ;-) ) Viele Grüße Peter
php::bar PHP Wiki - Listenarchive