![]() 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