Benjamin Mollenhauer: Wie eine Gruppensturktur anlegen?

Hallo,

ich möchte eine baumartige (im Moment sind's nur Gruppen) Struktur in eine Datenbank unterbringen.

h2
-item1
-item2
h2
-item3
-item4

Wie soll ich die Datenbank strukturieren?

Ich würde gerne alle Datensätze in einer Tabelle gemeinsam verwalten. Wie kann ich dann die Struktur verwalten? Die Elemente sollen wahlweise alle zusammen, aber dennoch gruppiert oder gruppenweise auf einer Seite ausgegeben werden.

Wie mache ich sowas am besten? Gibt es vielleicht sowas wie Zeiger?

Gruß,
Benni

PS:
http://www.megakerls.de/guide/ Hier gibts die erste Testseite.

Ich habe von DBs keine Ahnung. Ich hab zwar heute ein PHP geschrieben, das seine Datensätze aus einer mySQL-DB aussließt, formatiert und ausgibt, aber das ist schon alles, was ich über Datenbanken weiß.

Ich habe mir Überlegt, evtl. eine Gruppenspalte (jds. Item bekommt ein Gruppenbezeichner) einzurichten - ist aber sicherlich nicht optimal.
Eine andere Möglichkeit wäre, in einer Tabelle die Gruppen und für jede Gruppe nochmals ein eigene Tabelle anlegen. Dann könnte ich mit zwei verschachtelten while-schleifen alle durchmachen....
soweit meine Überlegungen.

  1. Hallo Benjamin

    Die Frage ist, ob Du eine wirklich baumartige Struktur in der DB abbilden willst, also beliebig viele Untergruppen und Einträge mit beliebig vielen Hierarchiestufen.
    Dann wird es etwas komplizierter:

    ID    ParentID   FirstChildID      NextID      Text
    1     0          2                 4           h2: Kapitel 1
    2     1          0                 3           item1: Abschnit 1 zu Kapitel 1
    3     1          0                 0           item2: Abschnit 2 zu Kapitel 1
    4     0          5                 0           h2: Kapitel 2
    5     4          0                 6           item3: : Abschnit 1 zu Kapitel 2
    6     4          0                 0           item4: : Abschnit 2 zu Kapitel 2

    Je nach DB-Engine soll anstelle des Werts 0 der Wert 'null' (für nicht definiert, != Zahl 0) verwendet werden.

    Die Bedeutung der Felder:
    ID:           Eindeutiger Wert für jeden Datensatz.
    ParentID:     ID des hierarchisch übergeordneten Elementes (Knoten). Falls ParentID 'Null' ist, dann ist das Element in der obersten Hierarchistufe.
    FirstChildID: ID des ersten darunterliegenden (Kind-)Elemenentes. Falls FirstChildID 'Null' ist, befinden sich keine Kind-Elemente unter dem Element. Das Element ist ein sog. Blatt des Baumes (=> also kein Knoten).
    NextID:       ID des nächsten Elementes in derselben Hierarchiestufe. Mit FirstChildID und NextID wird die Sortierreihenfolge innerhalb eines Astes festgelegt. Falls NextID 'Null' ist, ist es das letzte Element innerhalb des Astes.
    Text:         Beliebiges Feld, das Informationen über das Element enthält. Es sind hier auch mehrere Felder möglich.

    Dies ist ein, etwas komplexere Variante. Sie ist dafür sehr flexibel in der Anwendung.

    Falls Du jedoch nur eine feste Anzahl von Hierarchiestufen in deiner Baumstruktur hast (z.B. 2 wie in deinem Beispiel), dann ist es einfacher über eine feste Anzahl von Gruppierungsfelder zu arbeiten.
    In Deinem Beispiel bräuchtest Du auch nur ein Gruppierungsfeld, das die Werte 'h2' oder 'item' enthalten müsste.
    Die Abfrage der Tabelle könntest Du über SQL mit einer 'Group By'-Klausel im Select-Statement ausführen.

    Ich hoffe, Du wirst die passende Lösung zu Deinem Problem finden.

    Grüsse

    Tom

    1. Danke,

      ich hab das nun nach der einfachereren Variante gemacht.

      Benni