schmaus: Nesting - alle Kinder und Kindeskinder eines Elements

Moin,

ich habe folgende Tabelle

id name parent_id

1  spiel null
2  franz 1
3  peter 1
4  Gartenarbeit 2
5  Zaubern 4

Das Ergebnis soll sein:

[ "spiel" =>
[ "childs"=>
[ "franz" => ["childs"=> ["Gartenarbeit"=>["childs"=> "Zaubern"]]]]
[ "peter"]]]

Mir ist klar das ich es mit X INNER JOINS lösen könnte. Aber ich weiß nie wie tief das ganze sein würde. Der Query muss allerdings nicht unbedingt der schnellste sein. Die Struktur verändert sich so gut wie nie und könnte gecached werden.

Im Frontend soll daraus übrigens eine Navigation mit verschiedenen Dropdowns entstehen.
Ebenso soll man eine Breadcrumb Navigation darstellen können.
Ich denke dass das Tabellenschema so schon einmal in Ordnung wäre.

Gruß
Schmauser

  1. hi,

    Ich denke dass das Tabellenschema so schon einmal in Ordnung wäre.

    Abstrahiert nach dem EAV-Model (Entity, Attribute, Value) reichen drei Felder zum Abbilden einer Hierarchie, wobei eines der Attribute parent heißt. EAV ist nicht an eine DB gebunden, kann aber und da wäre eine Abfrage recht einfach, alle Einträge zu ermitteln, welche im Attribut parent denselben Eintrag haben.

    MfG

  2. Tach!

    Mir ist klar das ich es mit X INNER JOINS lösen könnte. Aber ich weiß nie wie tief das ganze sein würde. Der Query muss allerdings nicht unbedingt der schnellste sein. Die Struktur verändert sich so gut wie nie und könnte gecached werden.

    Nested Sets sind eine übliche Antwort auf dieses Problem. Aufwendig beim Dateneinpflegen, besonders wegen des Umnummerierens alle Datensätze, dafür hat man aber eine Menge Möglichkeiten beim Abfragen von Teilmengen. Mit diesem Stichwort dürftest du ausreichend Material finden, wie man sie implementiert und verwendet.

    dedlfix.