Hirachie aus Datenbank auslesen...

Alles, was PHP betrifft, kann hier besprochen werden.

Hirachie aus Datenbank auslesen...

Postby kappa » 06. May 2005 15:12

In meiner Datenbank hab ich ganz viel Inhalt, alle laufend nummeriert. Jetzt möchte ich diese in einer Baumstruktur anzeigen, dann einige von diesen Inhalten haben Unterinhalte. Das ganze soll "unendlich" viele Ebenen tief gehen, bis jetzt habe ich einen Workaround gemacht, der nur in die zweite Ebene geht, das sieht so aus:
Code: Select all
         while ($row = mysql_fetch_array($result))
         {
               $content_id = $row['ID'];
               $content_order = $row['order'];
               $content_header = $row['HEADER'];
               $content_hidden = $row['hidden'];
               $content_cat = $row['cat'];
               $content_parent = $row['parent'];
               if ($content_hidden == "true" || $content_hidden == "on")
               {
                    $content_hidden_2 = "<b>Versteckt</b>";
               }
               else
               {
                    $content_hidden_2 = "Nicht Versteckt";
               }
               echo "<form action=\"content.php\" method=\"post\">";
               echo "<tr><td><a href=content.php?cid=$content_id&login=bearbeiten>$content_id</a></td><td>$content_order</td>";
               echo "<td><a href=content.php?cid=$content_id&login=delete><img src=\"../style/trash.png\" border=\"0\"></a></td>";
               echo "<td>$content_header</td><td>$content_hidden_2</td></tr>";
               $query = 'SELECT * FROM content WHERE `parent` = "'.$content_id.'" ORDER BY `order`';
               $child_result = mysql_query($query);
               $error = mysql_error();
               echo $error;
               while ($child_row = mysql_fetch_array($child_result))
               {
                   $child_content_id = $child_row['ID'];
                   $child_order = $child_row['order'];
                   $child_header = $child_row['HEADER'];
                   $child_hidden = $child_row['hidden'];
                   $child_cat = $child_row['cat'];
                   $child_parent = $child_row['parent'];
                   if ($child_hidden == "true" || $child_hidden == "on")
                   {
                       $child_hidden_2 = "<b>Versteckt</b>";
                   }
                   else
                   {
                       $child_hidden_2 = "Nicht Versteckt";
                   }
                   echo '<tr><td><b>-&gt;</b><a href="content.php?cid='.$child_content_id.'&login=bearbeiten">'.$child_content_id.'</a></td><td>'.$content_order.'</td>';
                   echo '<td><a href="content.php?cid='.$child_content_id.'&login=delete"><img src="../style/trash.png" border="0"></a></td>';
                   echo '<td>'.$child_header.'</td><td>'.$child_hidden_2.'</td></tr>';
               }
         }

Wie sage ich, dass er soweit holen soll, bis keine Unterinhalte mehr da sind?
Ich hoffe ihr versteht mich ;)
kappa
 
Posts: 2
Joined: 06. May 2005 15:03

Postby jakimo72 » 12. May 2005 16:39

Da gibt es etwas, das nennt sich rekursion. Das bedeutet eine
Funktion ruft sich selber auf.
Code: Select all
function witeContent($parent,$level)
{
   if(isEmpty($parent))
     // führe "SELECT * FROM content WHERE `parent` is null" aus.
   else
     // führe "SELECT * FROM content WHERE `parent` = $parent" aus.
   
  while ($row = mysql_fetch_array($result))
  {
       //Einrückungen je nach $level
       // z.B. for($i=0; $i<level; $i++ ) echo "&nbsp;";

      // schreibe den Inhalt
     
     
     witeContent($content_id,$level+1); // Ruft sich selber auf!
     
  }

}

// Aufruf der Funktion mit Anfangswerten
writeContent(null,0);



Du musst nur noch die Platzhalter durch Deinen Code ersetzen.

Bei Rekursion immer darauf achten, dass die Rekursion
auch abbricht, dieses ist aber der Fall, wenn das Select
keine Ergebnisse liefert, dann wird die Whileschleife nicht mehr durchlaufen.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests