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