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