tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
342
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    Hallo!

    Ich habe eine Tabelle mit Kategorien. Hauptkategorien haben eine "0" im Feld "parentID". Nun habe ich es bereits geschafft, dass nur die Hauptkategorien angezeigt werden und wenn eine Hauptkategorie gewählt wurde, dessen Unterkategorien angezeigt werden.

    PHP-Code:
    $categorieresult mysql_query "Select `ID`, `parentID`, `name` FROM categories WHERE `parentID` = '0' ORDER BY `name`" );
                    while ( 
    $categorierow mysql_fetch_assoc $categorieresult ) ) {
                        echo 
    "<li class='dots'><a href='index.php?action=search&categorie=$categorierow[ID]'>$categorierow[name]</a></li>";
                        if ((
    $categorie != "") && ($categorierow [ID] == $categorie)) {
                            
    $parentcategorieresult mysql_query "Select `ID`, `parentID`, `name` FROM categories WHERE `parentID` = '$categorie' ORDER BY `name`" );
                            while ( 
    $parentcategorierow mysql_fetch_assoc $parentcategorieresult ) ) {
                                echo 
    "&bull;&nbsp;<a href='index.php?action=search&categorie=$parentcategorierow[ID]'>$parentcategorierow[name]</a><br>";
                            }
                        }
                    } 
    Nun haben aber einige Unterkategorien wiederum Unterkategorien und so weiter. Wie kann ich das effizient lösen, ohne dass ich durchzähle wieviele Unterkategorien eine Hauptkategorie maximal hat und den Code oben weiter erweitere? Und vor allem, wie schaffe ich es, dass die übergeordneten Kategorien offen bleiben, wenn ich eine Unterkategorie wähle?

    Habt Ihr eine Lösung für mich? Vielen Dank!
    Geändert von Sasser (04.09.09 um 13:18 Uhr)
     

  2. #2
    Avatar von awortmeier
    awortmeier awortmeier ist offline Mitglied Gold
    Registriert seit
    Jun 2009
    Beiträge
    164
    Stehen ALLE Kategorien in einer Tabelle?
    also:

    Kat = Kategorie
    U = Unter

    Kat1
    UKat1
    UUKat 1

    Kat2
    UKat2
    UUKat 2.1
    UUKat 2.2
    ...

    Ist so die Struktur?
    Oder sind die Kats, UKats und UUKats in getrennten Tabellen?
    Das hab ich nicht ganz verstanden.
     

  3. #3
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    Also ich habe 3 Felder:

    ID
    parentID
    name

    Die ID ist immer die eindeutige ID der Kategorie und wenn "parentID" nicht Null ist, ist Sie eine Unterkategorie. In dem Fall gibt "parentID" die ID an, unter welche Hautkategorie sie gehört.

    Beispiel:

    Auto (ID=1,parentID=0)
    Autos kaufen (ID=2,parentID=1)
    Autos verkaufen (ID=3,parentID=1)
    AUDI (ID=4,parentID=3)
    Ich habe folgendes im Netz gefunden, allerdings ohne Code und dass ist genau so wie ich es zur Zeit habe:


    Baumdarstellung mit Vater-Zeiger

    Eine sehr beliebte Variante zur Baumdarstellung ist, die einzelnen Knoten mit einer eindeutigen ID zu versehen und dann bei jedem Knoten die jeweilige Vater-ID zu speichern. Da über die Vater-ID auf den Vater (übergeordneter Knoten) gezeigt wird, ergibt sich die Bezeichnung ,,Baumdarstellung mit Vater-Zeiger``. Konkret ergeben sich daraus die Werte in Tabelle 7.1, wobei eine Vater-ID mit 0 bedeutet, daß es die Root (engl.: Wurzel) ist.
    Geändert von Sasser (04.09.09 um 13:45 Uhr)
     

  4. #4
    kuddeldaddeldu kuddeldaddeldu ist offline Mitglied Diamant
    Registriert seit
    Dec 2007
    Ort
    Bremen
    Beiträge
    3.418
    Hi,

    das nennt man auch "Adjacency List Model". Schau Dir den Artikel "Storing Hierarchical Data in a Database" an, dort findest Du die benötigte rekursive Funktion, um den Baum auszulesen. Auf der 2. Seite findest Du eine mögliche Alternative zur Speicherung, die auch als "Nested Sets" bekannt ist.

    LG
     
    Da es nötig zu werden scheint: Ich leiste hier keinen Support über PN. Stellt Rückfragen zu Euren Problemen bitte in Eurem Thread, dann können alle helfen.

  5. #5
    Sasser Sasser ist offline Mitglied Smaragd
    Registriert seit
    Mar 2008
    Beiträge
    1.000
    So, ich habe nun einmal das Beispiel ausprobiert, aber ich bekomme eben nur die Unterkategorien der Hauptkategorien angezeigt. Die Unterkategorien der Unterkategorien werden nicht angezeigt.

    PHP-Code:
    function parent($parentID$level) {
                        
    $result mysql_query "SELECT `ID`, `name` FROM categories WHERE parentID = '$parentID' ORDER BY `name`");
                        while (
    $row mysql_fetch_array($result)) {
                            echo 
    str_repeat ''$level ) . $row [name] . "<br>";
                            
    parent $row [ID], $level );
                        }
                    }
                    
    $categorieresult mysql_query "Select `ID`, `name` FROM categories WHERE `parentID` = '0' ORDER BY `name`" );
                    while ( 
    $categorierow mysql_fetch_assoc $categorieresult ) ) {
                        echo 
    "<li class='dots'><a href='index.php?action=search&categorie=$categorierow[ID]'>$categorierow[name]</a></li>";
                        
    parent $categorierow [ID],);
                    } 
     

Ähnliche Themen

  1. array aus Datenbank (Kategorieliste)
    Von Gunah im Forum PHP
    Antworten: 1
    Letzter Beitrag: 03.09.09, 12:44
  2. Nestedset Unterkategorien auslesen
    Von low-group im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 01.11.06, 20:22
  3. unterkategorien anlegen
    Von xtraMen im Forum PHP
    Antworten: 2
    Letzter Beitrag: 27.09.04, 13:06
  4. JConfig ohne Unterkategorien?
    Von Snape im Forum Java
    Antworten: 5
    Letzter Beitrag: 02.06.04, 14:11