Mailinglisten-Archive |
Ich empfehle für so etwas immer wieder gerne: http://phpbar.de/w/Baumstruktur_aus_DB_in_Array_abbilden Damit liest Du in einem ersten Schritt den gesamten Baum in einer Abfrage aus, speicherst diesen in einem Array und arbeitest anschließend nur noch mit diesem Array. Keine weiteren SQL-Abfragen. Gerade wenn du die Struktur mehr als einmal benötigst, ist das sehr nützlich. Schöne Grüße aus der Müggenkampstraße, Florian Grell ---------------------------------- Webentwicklung WERK4.1 Neue Medien GmbH Müggenkampstraße 7a-9a 20257 Hamburg +49 [0]40 40 17 444 -70 Telefon +49 [0]40 40 17 444 -99 Fax http://www.werk4.net ---------------------------------- Geschäftsführer: Frank Wilde, Alessandro Eggers, Marcus Reisiger, Björn Kaas Amtsgericht Hamburg | HRB 82829 Die vorstehende Nachricht ist vertraulich, nur für den Adressaten bestimmt und darf nicht unbefugt an Dritte weitergegeben werden. Sollten Sie nicht der vorgesehene Adressat dieser Nachricht sein, löschen Sie bitte die Nachricht sofort und benachrichtigen Sie den Absender. Rechtsgeschäftlich bindende Erklärungen werden durch diese Nachricht nicht abgegeben. Am 12. Oktober 2011 08:20 schrieb Trawell Mildor <trawell.mildor at gmail.com>: > Guten Morgen André > > Danke für den Code. > Werd mich heut mal damit auseinandersetzen und schauen was der so macht. > > Gruess, Trawell > > Am 11. Oktober 2011 20:13 schrieb A. Sauder <andre.sauder at netzwerkcenter.ch> > : > >> Hallo >> >> Also deine Lösung funktioniert wohl schon auch, nur hast du das Problem >> so bald du >> eine Ebene Tiefer rein willst. >> Denn das was du machst ist nicht wirklich Rekursiv, sondern mehr >> Verschachtelt. >> >> Hier mal ein ungeprüftes Beispiel einer rekursiven Methode und deren >> Aufruf. >> >> <?PHP >> >> $categoryThree = array(); // initiieren des Array >> $categoryThree = getCategorysFromParent($categoryThree, 0, 0); // >> erster aufruf der rekursiven funktion >> >> // durchlaufen des erzeugten Array mit Mengenkontrolle >> if(count($categoryThree) > 0){ >> foreach($categoryThree as $k1 => $v1){ >> echo '<div >> style="margin-left:'.($v1['lefel']*5).'px;'>'.$v1['kategorie'].'</div>'; >> // ausgabe der Kategorie mit Einrückung >> } >> } >> >> /** >> * Liest alle Kategorieen zu einem Parent aus und ergaenzt das >> ThreeArray entsprechend. >> * Die Chield Kategorieen werden direkt unter dem Parent in das Array >> geschrieben >> * >> * $categoryThree = Array mit den bereits vorhandenen Kategorieen >> * $parentId = ID der uebergeortneten Kategorie >> * $level = Ebene auf der sich die auszulesenden Kategoreen befinden >> */ >> function getCategorysFromParent($categoryThree, $parentId, $level){ >> >> $sql = 'SELECT * >> FROM kategorien >> WHERE id_parent = '.$parentId.' >> ORDER BY id_kategorie ASC'; >> $categories = mysql_query($sql , $conDB) or die(mysql_error()); >> while ($row = mysql_fetch_array($categories, MYSQL_ASSOC)) { >> >> $categoryThree[$row['id']] = $row; // record in den Three >> speichern >> $categoryThree[$row['id']]['level'] = $level; // level mit >> speichern >> >> getCategorysFromParent($categoryThree, $row['id_kategorie'], >> $level+1); // Aufruf der gleichen Methode mit neuer ID und erhöten >> Level >> } >> } >> >> ?> >> >> >> Dieses Beispiel könnte dir so etwas raus geben: >> >> Kategorie A >> Kategorie A.A >> Kategorie A.B >> Kategorie B >> Kategorie C >> Kategorie C.A >> Kategorie C.B >> Kategorie C.C >> ... >> >> Hoffe konnte dir etwas helfen. >> >> Gruss André >> >> Am 11.10.2011 18:02, schrieb Trawell Mildor: >> > Guten Abend zusammen. >> > >> > hab mich mal mit rekursiven Abfragen beschäftigt..und ja ich >> > weiss..Nestet >> > Sets sind sicher besser :) >> > >> > Also..ich möchte einen Kategorienbaum mit drei Ebenen >> > >> > und hab dazu folgendes Script gebastelt..so zum Verständnis..und würd >> > gern >> > Meinungen von Profis dazu lesen :) >> > >> > Das Script gibt nur die Kategorien in der entsprechenden Reihenfolge >> > aus...also ohne Menü usw. >> > >> > Ich bin PHP Neuling und über Tips immer aufgeschlossen. >> > >> > Gruss, Trawell >> > >> > >> > <?php require_once('../Connections/conDB.php'); ?> >> > <?php >> > mysql_select_db($database_conDB, $conDB); >> > ?> >> > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " >> > http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> >> > <html xmlns="http://www.w3.org/1999/xhtml"> >> > <head> >> > <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> >> > <title>Unbenanntes Dokument</title> >> > </head> >> > >> > <body> >> > <?php >> > >> > /* Erste Abfrage mit Parent ID = 0 , also Hauptkategorien */ >> > $query_maincategories = "SELECT * FROM kategorien WHERE id_parent = 0 >> > ORDER >> > BY id_kategorie ASC"; >> > $maincategories = mysql_query($query_maincategories, $conDB) or >> > die(mysql_error()); >> > $row_maincategories = mysql_fetch_assoc($maincategories); >> > do { >> > echo '<h1>'.$row_maincategories['kategorie'].'</h1><br />'; >> > $zahl = $row_maincategories['id_kategorie']; >> > /* Zweite Abfrage mit Parent ID = aus der ersten Abfrage von >> > id_kategorie >> > */ >> > $query_subcategories = "SELECT * FROM kategorien WHERE id_parent = >> > $zahl >> > ORDER BY id_kategorie ASC"; >> > $subcategories = mysql_query($query_subcategories, $conDB) or >> > die(mysql_error()); >> > $row_subcategories = mysql_fetch_assoc($subcategories); >> > do { >> > echo '<h2>'.$row_subcategories['kategorie'].'</h2><br />'; >> > $zahl = $row_subcategories['id_kategorie']; >> > /* Dritte Abfrage mit Parent ID = aus der zweiten Abfrage von >> > id_kategorie >> > */ >> > $query_subsubcategories = "SELECT * FROM kategorien WHERE id_parent = >> > $zahl >> > ORDER BY id_kategorie ASC"; >> > $subsubcategories = mysql_query($query_subsubcategories, $conDB) or >> > die(mysql_error()); >> > $row_subsubcategories = mysql_fetch_assoc($subsubcategories); >> > do { >> > if (isset($row_subsubcategories['kategorie'])) >> > { >> > echo '<h3>'.$row_subsubcategories['kategorie'].'</h3><br />'; >> > } >> > } >> > while ($row_subsubcategories = mysql_fetch_assoc($subsubcategories)); >> > } >> > while ($row_subcategories = mysql_fetch_assoc($subcategories)); >> > } >> > while ($row_maincategories = mysql_fetch_assoc($maincategories)); >> > >> > ?> >> > </body> >> > </html> >> > <?php >> > mysql_free_result($maincategories); >> > mysql_free_result($subcategories); >> > mysql_free_result($subsubcategories); >> > ?> >> >> -- >> ** Allgemeine deutschsprachige PHP-Liste: php at phpbar.de ** >> Informationen: http://www.phpbar.de >> http://lists.phpbar.de/mailman/listinfo/php >> > -- > ** Allgemeine deutschsprachige PHP-Liste: php at phpbar.de ** > Informationen: http://www.phpbar.de > http://lists.phpbar.de/mailman/listinfo/php >
php::bar PHP Wiki - Listenarchive