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