Mailinglisten-Archive |
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); > ?>
php::bar PHP Wiki - Listenarchive