+ Antworten
Ergebnis 1 bis 8 von 8

Thema: MySQL-Tabelle rekursiv auslesen

  1. #1
    TP-Veteran Guitar ist auf einem guten Weg Avatar von Guitar
    Registriert seit
    Nov 2001
    Ort
    Friedrichshafen am Bodensee
    Beiträge
    1.065

    MySQL-Tabelle rekursiv auslesen

    Hallo,

    ich habe ein kleines Problem:

    ich habe eine MySQL-Tabelle, die Produktkategorien enthält. Jede Kategorie kann beliebig viele Unterkategorien haben, jede Unterkategorie wieder beliebig viele weitere Unterkategorien usw. Die Tiefe der Verschachtelung ist nicht begrenzt.

    Die Struktur der Tabelle ist wie folgt:

    Feld:
    catid
    pid
    tid
    catname

    catid ist die eindeutige ID-Nummer jeder Kategorie.
    pid ist die ID der übergeordneten Kategorie
    tid ist die ID der übergeordneten Kategorie des obersten Levels, welche immer die pid=0 hat
    catname der Name der Kategorie

    Ich versuche jetzt, eine Funktion zu bauen, die es mir erlaubt, von einer beliebigen Kategorie aus alle Unterkategorien zu ermitteln und in ein Array zu übergeben, dass danach ausgewertet werden kann.

    Die Funktion sieht bis jetzt so aus:
    PHP-Code:
    function findsubcats($id,$liste) {
                
        global 
    $db;
        
        
    $query=$db->query("SELECT * FROM kategorien WHERE pid='$id'");
        
    $anzahl=$db->num_rows($query);
        
        while (
    $result=$db->fetch_array($query)) {
            
    $id=$result[catid];
                    
            
    array_push($liste,$id);
                    
            
    findsubcats($id);
        }
        
        return 
    $liste;

    Aufgerufen wird die Funktion an einer beliebigen Stelle des Skripts über:
    PHP-Code:
    $subcats=findsubcats($catid
    wobei $catid die ID einer beliebigen Kategorie sein soll.

    Zurückgeben soll die Funktion ein Array mit allen Unterkategorien. Und eben diese Rückgabe funktioniert so nicht.

    Wenn ich mir innerhalb der while-Schleife die Variable $id per echo anzeigen lasse, sehe ich, dass tatsächlich alle Subkategorien gefunden werden, aber der Aufbau des Arrays $liste funktioniert nicht.

    Am Ende enthält $subcats nur die IDs der Subkategorien im ersten untergeordneten Level.

    Ich hoffe, ich habe mich jetzt einigermaßen verständlich ausgedrückt

    Hat jemand eine Idee, wo hier der Fehler liegt? Ich grübele jetzt schon seit 2 Tagen über Sache und komme alleine wohl nicht mehr weiter.

    Gruß
    Wolfgang
    Gruß, Wolfgang

    Webdesign Friedrichshafen

  2. #2
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Mach das bloß nicht rekursiv, sondern informiere Dich zum Thema "nested sets".
    Das ist eine Technik beliebig tief verschachtelte Bäume resourcenschonend in Datenbanken abzulegen und auszulesen. Du wirst hier im Forum dazu fündig.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  3. #3
    TP-Specialist phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts phpBuddy ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von phpBuddy
    Registriert seit
    Aug 2004
    Ort
    Kaiserslautern
    Beiträge
    4.678
    Zitat Zitat von DSB Beitrag anzeigen
    ... sondern informiere Dich zum Thema "nested sets"....
    Du wirst hier im Forum dazu fündig.
    Genau, und zwar direkt eine Tür weiter im Tutorial Board: Nested Set

  4. #4
    TP-Veteran Guitar ist auf einem guten Weg Avatar von Guitar
    Registriert seit
    Nov 2001
    Ort
    Friedrichshafen am Bodensee
    Beiträge
    1.065
    Okay, danke, ich werd mich mal schlau machen. Ist wohl tatsächlich besser geeignet. Blos dumm, dass die MySQL-Tabelle mit ca. 3000 Kategorien schon vorliegt
    Gruß, Wolfgang

    Webdesign Friedrichshafen

  5. #5
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    erstell doch eine Umhängetabelle für Kategorien, dann brauchst Du keine Rekursion.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  6. #6
    TP-Veteran Guitar ist auf einem guten Weg Avatar von Guitar
    Registriert seit
    Nov 2001
    Ort
    Friedrichshafen am Bodensee
    Beiträge
    1.065
    Zitat Zitat von steffenk Beitrag anzeigen
    erstell doch eine Umhängetabelle für Kategorien, dann brauchst Du keine Rekursion.
    Wie meinst du das?
    Gruß, Wolfgang

    Webdesign Friedrichshafen

  7. #7
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    ich meine den Baum abzubilden, da gibt es mehrere Möglichkeiten, hier mal eine

    PHP-Code:
    $tree=array();
    while(
    $row=mysql_fetch_assoc($res)) {
       
    $tree[$pid][]=$row['catid'];

    jetzt kannst Du entweder in der Ursprungstabelle zu jeder Kategorie den Baum ablegen, z.B.
    $cattree=serialize($tree[$catid]);
    oder eine Kommaliste produzieren und in eine eigene Tabelle eintragen.

    Sicher gibts noch mehr Möglichkeiten.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  8. #8
    TP-Veteran Guitar ist auf einem guten Weg Avatar von Guitar
    Registriert seit
    Nov 2001
    Ort
    Friedrichshafen am Bodensee
    Beiträge
    1.065
    Nachdem ich mich jetzt mal näher mit dem Thema Nested Sets beschäftigt habe, habe ich mich entschlossen, dass Problem auf diese Weise zu lösen. Funktioniert bis jetzt einwandfrei. Und die Datenbank werde ich halt neu erstellen, ist zwar ein wenig aufwendig, aber ich denke, der Aufwand lohnt sich.

    Vielen Dank für eure Tipps!
    Gruß, Wolfgang

    Webdesign Friedrichshafen

+ Antworten

Stichworte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51