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