Rekursiv DB auslesen

  • Rekursiv DB auslesen

    Guten Morgen,

    Ich habe folgende Tabellenstruktur:


    um Kategorien darzustellen. (parent_id=0 entspricht der obersten Hierarchiestufe)
    Nun wollte ich einen Hierarchiebaum ausgeben lassen, den ich später dazu verwenden will den Inhalt der Kategorien anzuzeigen.
    Leider ist mein Denkansatz heute früh nicht so der wahre.
    Ich brauche also ne Funktion die mir das Ding rekursiv ausliest. Kann mir da jemand helfen?

    hier mein Code:

    Quellcode

    1. function getSub($parent_id){
    2. $sql = "SELECT * FROM `gal_kat` WHERE parent_id = ".$parent_id;
    3. $result = mysql_query($sql) or die(mysql_error());
    4. $anz = mysql_num_rows($result);
    5. if($anz > 0){
    6. while($row = mysql_fetch_assoc($result)){
    7. getSub($row['kat_id']);
    8. }
    9. }
    10. elseif($anz == 0) {
    11. $sql = "SELECT * FROM `gal_kat` WHERE kat_id = ".$parent_id;
    12. $result = mysql_query($sql) or die(mysql_error());
    13. while($row = mysql_fetch_assoc($result)){
    14. echo "Name ausgeben: ".$row['kname']."<br>";
    15. }
    16. }
    17. echo "<hr>";
    18. }
    Alles anzeigen


    danke im Voraus
    Bilder
    • db.gif

      4,88 kB, 296×173, 881 mal angesehen
  • moin!

    Es gibt nur eine Ausgabe, wenn die aktuelle Kategorie keine weiteren Unterkategorien hat?
    Packe die Ausgabe doch direkt in die While Schleife

    Quellcode

    1. function getSub($parent_id) {
    2. $sql = "SELECT `kname`,`kat_id` FROM `gal_kat` WHERE parent_id = ".$parent_id;
    3. $result = mysql_query($sql) or die(mysql_error());
    4. $anz = mysql_num_rows($result);
    5. while($row = mysql_fetch_assoc($result)) {
    6. echo 'Name ausgeben: '.$row['kname'].'<br />';
    7. getSub($row['kat_id']);
    8. }
    9. echo "<hr>";
    10. }


    Aber was anderes:
    [phpdoc]mysql_num_rows[/phpdoc] ist ja eine php Funktion und braucht Performance.

    Besser als

    Quellcode

    1. $anz = mysql_num_rows($result);
    2. if($anz > 0){
    3. while($row = mysql_fetch_assoc($result)){
    4. getSub($row['kat_id']);
    5. }
    6. }
    7. elseif($anz == 0) { ...


    wäre z.B.

    Quellcode

    1. $anz = 0;
    2. while($row = mysql_fetch_assoc($result)){
    3. getSub($row['kat_id']);
    4. $anz++;
    5. }
    6. if($anz == 0) { ...