phpbar.de logo

Mailinglisten-Archive

[php] Rekursive Abfragen für Kategorien

[php] Rekursive Abfragen für Kategorien

Trawell Mildor trawell.mildor at gmail.com
Mi Okt 12 08:20:18 CEST 2011


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