dedlfix: Liste mit Kategorien und Unterkategorien (2. Lösungsidee)

Beitrag lesen

Tach!

Warum sind es überhaupt zwei Tabellen?
Na wie sonst? Ich brauche ja pro Kategorie eine _eindeutige_ ID, damit ich etwas habe, worauf sich die Unterkategorie beziehen kann. Sonst weiß ich ja nicht, zu welcher Hauptkategorie sie gehört.

Ja, und das geht.

Wenn ich Beides in eine Tabelle schmeisse, dann nummeriert mir die ID einfach die Einträge durch. Völlig sinnlos. Ich brauche IDs für meine Hauptkategorien und IDs für meine Unterkategorien.

Die Inhalte der ID sind belanglos. Sie müssen nur eindeutig sein. Und das ist auch mit einer Tabelle gewährleistet.

ID | ParentID | Name
1  | 0        | Hauptkategorie
2  | 1        | Unterkategorie
3  | 0        | zweite Haupt
4  | 0        | dritte Haupt
5  | 3        | Unterkat zur zweiten

Verschachtelte Strukturen lassen sich problemlos in einer Tabelle unterbringen.

Es handelt sich um eine Link-Sammlung, also eine Lesezeichenverwaltung von URLs. (Siehe die "Tabelleninhalte" in meinem Ursprungsposting.) Die Hauptkategorien sind Themenüberschriften - unter denen sich die Unterkategorien aufteilen. Diese sind wieder Themen, unter denen sich dann die Links aufteilen. Es gibt dann also noch eine 3. Tabelle mit allen URLs und 2 INT Feldern, die sich auf die IDs von Kategorie und Unterkategorie beziehen.

Und die ist vermutlich auch unnötig. Die Links können ebenfalls mit in der einen Tabelle als weiteres Feld stehen.

Wenn sie gleich sind, dann nähme ich eine Tabelle im Stile deiner jetzigen Unterkategorie-Tabelle und die Hauptkategorien bekommen einen Parent-Zeiger mit dem Wert 0 (oder NULL).
Wie gesagt - das würde mir nichts bringen, weil wenn eine neue Unterkategorie hinzukommt, muss ja festgelegt werden, zu welcher Hauptkategorie sie gehört. Und somit brauche ich Hauptkategorien mit eindeutigen IDs.

Doch doch, das geht alles mit einer Tabelle. Es gibt dabei keine Probleme mit eindeutigen IDs.

Spricht was gegen ein verschachteltes, bei dem die Unterkategorien zur jeweilgen Hauptkategorie zugeordnet sind?
Wieso so kompliziert? Ob ich jetzt 1 mehrdimensionales Array oder 2 eindimensionale Arrays habe, ist mir völlig egal.

Das eine mag komplexer aussehen, hat aber den Vorteil, dass es beim Verarbeiten einfacher zugeht, weil die Beziehungen zueinander bereits da sind und nicht jedes Mal überprüft werden müssen.

Aber abgesehen davon: Schön und gut ... und wie stellst Du Dir dann vor, aus diesem mehrdimensionalen Array die Liste wie von mir gewünscht auszugeben? Das wird ja dann _noch_ komplizierter. Also bisher hat mir niemand aufzeigen können, dass es einen simpleren/unkomplizierteren/kürzeren Weg gibt als meine letzte Lösung.

foreach ($categories as $category) {  
  echo "<li>", htmlspecialchars($category['name']);  
  if ($category['subcategories']) {  
    echo "<ul>";  
    foreach ($category['subcategories'] as $subcategory) {  
      echo "<li>".$unterkategorie['name']."</li>";  
    }  
    echo "</ul>";  
  }  
  echo "</li>";  
}

Dein Code hat auch noch einen HTML-ul-li-Verschachtlungsfehler enthalten. Mein COde hat jetzt immer noch die gleiche Anzahl an foreach (2) und if (1), aber das if würdest du auch benötigen, wenn du richtig schachtelst und für leere Kategorien kein unnützes <ul></ul> im Ergebnis haben möchtest. Somit hätte deine Lösung dann 2 if und wäre komplexer.

Wie gesagt, ich wolte wissen, ob es noch simpler/kürzer/einfacher geht. Das wäre hier sicher nicht der Fall.

Es kommt nicht immer auf die Kürze beim Code an. Das Abbilden der logischen Zusammenhänge in _einer_ Datenstruktur kann einem zu schnellerem Erkenntnisgewinn verhelfen, als wenn man sich die Beziehungen zueinander über die im Code verstreuten if zusammensuchen muss. Code/Strukturen für Computer lesbar zu schreiben/entwerfen, ist kein Problem. Code/Strukturen für Menschen lesbar zu schreiben/entwerfen, ist die hohe Kunst.

dedlfix.