Rekursiv DB auslesen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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, 826 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) { ...