5 Stimmen

Wie kann ich die Baumstruktur in HTML aus der Closure-Tabelle anzeigen?

Ich speichere hierarchische Daten in MySQL. Aus verschiedenen Gründen habe ich mich entschieden, Closure-Tabellen zu verwenden (anstelle von verschachtelten Sets, Adjazenzlisten und ähnlichem). Bisher hat es bei mir gut funktioniert, aber jetzt versuche ich herauszufinden, wie ich diesen Baum tatsächlich in HTML anzeigen kann (d. h. mit korrekten Einrückungen).

Zum Beispiel, nehmen wir an, ich habe einen Baum wie folgt...

  • Lebensmittel
    • Obst
      • Äpfel
      • Birnen
    • Gemüse
      • Möhren

Meine "Lebensmittel" Tabelle würde so aussehen...

[ID]    [PARENT_ID]    [NAME]
1       0              Lebensmittel
2       1              Obst
3       1              Gemüse
4       2              Äpfel
5       2              Birnen
6       3              Möhren

Meine "Closure" Tabelle würde dann so aussehen...

[ELTERN]    [KIND]    [EBENE]
1           1          0
2           2          0
3           3          0
4           4          0
5           5          0
6           6          0
1           2          1
1           3          1
1           4          2
1           5          2
1           6          2
2           4          1
2           5          1
3           6          1

Nun frage ich mich, wie ich das Ganze korrekt in HTML anzeigen kann, idealerweise so...

    Lebensmittel

            Obst

                    Äpfel
                    Birnen

            Gemüse

                    Möhren

...was meinen Baum in Form von Punkten am Anfang meiner Frage anzeigen würde. Jedenfalls wäre jede Hilfe sehr willkommen!

Charles

3voto

naota Punkte 4665

Sie können einen rekursiven Funktionsaufruf verwenden.

PSEUDO-CODE(Abstrakt):

Funktion showTree(parent_id){

      // Kind-IDs aus der DB abrufen, die mit der gegebenen Eltern-ID verknüpft sind
      Ergebnis = GetChildren(parent_id);

      während(...){

          kind_id = resultat[...];

          // rufen Sie diese Funktion erneut auf
          showTree(kind_id);

      }
}

PSEUDO-CODE(Detailiert):

Funktion showTree( parent_id ){

    /* Abrufen von Kind-Einträgen, die eine Beziehung zur gegebenen Eltern-ID haben. */

    SQL = "SELECT * FROM Foods ( WHERE PARENT_ID = " + parent_id + ")";
    Ergebnisse = executeSQL(SQL);

    print "";
    i = 0;
    während(/*Ergebnisse Datensatz haben*/){
        zeile = Ergebnisse[i];

        print "" + zeile["NAME"] + "";

        /*
         * Hier wird ein rekursiver Aufruf gemacht.
         * Geben Sie 'ID' als Parameter aus. 
         * Dieses 'ID' wird als 'PARENT_ID' in der hier aufgerufenen Funktion empfangen.
         */
        rufen Sie showTree(zeile["ID"]);

        i = i +1;
    }
    print "";

}
/* 
 * Beginnen Sie nun mit dem Aufruf der Funktion von oben bei den Wurzeln.
 */
rufen Sie showFoods( 0 ); // Parameter '0' ist der Wurzelknoten.

Ich hoffe, das wird Ihnen helfen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X