Open source PHP Klasse für Nested Sets in MySQL

Was ist eine Baumstruktur?

Gerichteter Baum

Eine Baumstuktur wird in der Informatik oftmals benötigt um Daten zu strukturieren. Zum Beispiel ist das gesamte Dateisystem als Baum darstellbar. Oder Hierachien in einem Unternehmen. MySQL ist jedoch dafür bekannt Daten in einer tabellarischen Form auszulesen und zu speichern. Nested Stets kommen eigentlich aus der Mengenlehre aber lassen sich als Baum hin- und herwandeln. Lediglich die visuelle Darstellung ist anders.

Nested Sets in einer Liste?

Damals habe ich mal einen ganz kurzen Blogeintrag geschrieben, mit deren Hilfe man Bäume in MySQL effektiv speichern kann. Ich habe dazu jetzt mal die Zeit gefunden um eine simple PHP-Klasse zu schreiben, welche die einfachsten bzw. gebräuchlichsten Methoden unterstüzt:

  • Baum laden
  • Element einfügen
  • Element löschen (inkl. Kind-Elemente)
  • istKnoten? (bzw. hat Kinder?)
  • als HTML anzeigen

DEMO      DOWNLOAD als ZIP

Klasse


DEMO      DOWNLOAD als ZIP

Demonstration


DEMO      DOWNLOAD als ZIP

4 Antworten auf „Open source PHP Klasse für Nested Sets in MySQL“

  1. Hallo wuda,

    erst einmal ein riesen Dankeschön für die Klasse.

    Ich habe aber noch kleine Anmerkungen/Fragen
    Und zwar ist die Tabelle im Konstruktor fehlerhaft denke ich. Es fehlt anscheinend die Spalte „rowid“ in die du eine Zeile Tiefer schreiben willst.

    Desweiteren frage ich mich warum bei der addItem Funktion eine $parentID übergeben wird. Diese wird ja auch nicht mit in die Tabelle geschrieben.
    Falls dies nur zum Selektieren des Vorgängers ist, sollte sie zumindest mit gespeichert werden um weitere Äste anzulegen und zu identifizieren.

    VG
    Philipp

    1. Hi Philipp,

      rowid ist die Indexierungs-Spalte von SQLite3 und wird automatisch angelegt. Bei MySQL muss man sie per Hand anlegen, da hast du Recht.

      Bei addItem gibt es den optionalen Parameter „ParentID“ der aber standardgemäß auf 1 gesetzt ist.
      Wie der Name bereits sagt, bedeutet das, dass man Kind-Elemente dieser von der angegebenen ID anlegen kann.

      Schöne Grüße
      Daniel

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.