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

Beitrag lesen

Hallo dedlfix!

Ja, und das geht.

Das mag schon sein, was daran alerdings besser ist, entzieht sich meiner Logik.

Die Inhalte der ID sind belanglos.

Was genau meinst Du bitte damit? Der "Inhalt der ID"? Verstehe ich Dich richtig, dass Du damit sagen willst, jede Kategorie braucht eine eindeutige ID und jede Unterkategorie braucht eine eindeutige ID, aber es muss nicht jede Zahl als ID in jeder Gruppe stehen? Analog dazu: Es gibt keine getrennten Kinokarten für Männer und Frauen, beide bekommen die selben, trotzdem hat jede einzelne Kinokarte als "unique ID" einen eindeutigen, nicht doppelt vorkommenden Sitzplatz. War es das, was Du mit dem "Die Inhalte der ID sind belanglos" sagen wolltest?

Ich frage mich weiterhin, wieso das besser sein soll. Jedenfaslls war das auch schon das Einzige, was ich an Deinem Beitrag glaube, verstanden zu haben.

Es gibt dann also noch eine 3. Tabelle mit allen URLs
Und die ist vermutlich auch unnötig. Die Links können ebenfalls mit in der einen Tabelle als weiteres Feld stehen.

Also bei allem Respekt, das ist Nonsens. Ich fasse in Tabellen Daten zusammen, die auch in Sinn/Inhalt einen Zusammenhang haben. Ich lasse mir theoretisch ja noch einreden, dass das in meinem Fall bei Kategorien und Unterkategorien der Fall ist, weil beides thematische Beschreibungen für die URLs sind. Die URLs selbst sind dann aber eine _völlig_ andere Art von Information. Zu sagen, man soll doch alles in eine Tabelle packen, widerspricht dem Ziel der Normalisierung. Zumindest macht es jemanden, der Redundanzen vermeiden möchte, das Leben nicht gerade einfacher.

Um eine weitere Analogie aufzuzeigen: Mit der selben Logik würde man jemenden, der eine DB für einen Autovermieter erstellt und eine Tabelle mit den Fahrzeugkategorien sowie eine mit den Fahrzeugen füllt, sagen, er soll doch die Autos in die selbe Tabelle wie die Fahrzeugkategorien schmeissen. Auch hier stünden dann 2 _völlig_ verschiedene Informationen in eienr Tabelle.

Dein Code hat auch noch einen HTML-ul-li-Verschachtlungsfehler enthalten.

Stimmt, das habe ich tatsächlich nicht bedacht, dass eine <ul> in einer anderen <ul> nur zwischen 2 <li> valide ist. Dabei <http://de.selfhtml.org/html/text/listen.htm#verschachteln@title=steht das in der Doku> extra drin.

Nur verstehe ich Dein PHP nicht. Wo kommt das "$category['subcategories']" plötzlich her? Das hat weder was mit meiner 2. Lösung, noch mit der von Dir vorgeschlagenen Tabelle, in der Kategorien und Unterkategorien gemeinsam stehen, zu tun. Abgesehen davon:

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

Wenn diese Daten in einem Array landen, wie soll dann via PHP eine Liste mit den zusammengehörenden Unterkategorien als Unterliste entstehen, ohne dass auch hier für jede Zeile das komplette Array durchlaufen werden muss, wenn Kategorien und zusammengehörende Unterkategorien völlig durcheinender in der Tabelle gespeichert sind?

Generell: Bei Deiner Tabelle ende ich mit einem mehrdimensionalen Array (Und ja, ich weiß, dass _Du_ das _nicht_ so nennst in PHP). Wenn ich das jetzt mit einem foreach($rows AS $row) durchlaufen lasse, habe ich pro Zeile 3 Informationen zur Verfügung: $row['id'], $row['ParentID'] und $row['Name']. Und wie soll da jetzt eine Liste entstehen, wo Kategorien und Unterkategorien logisch richtig angeordnet sind?

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.

Also was da einfacher sein soll als meine 2. Lösung, sehe ich nicht.

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.

Ich habe viele Links. Jeder Link ist einer Unterkategorie zugeordnet. Und mehrere Unterkategorien sind thematisch zusammengehörend und einer Kategorie zugeordnet. Punkt. Ende. Um diesen Zusammenhang zu verstehen, brauche ich doch nicht alles noch komplizierter machen, als es ohnehin schon ist.

Apropos "Code/Strukturen für Menschen lesbar zu schreiben/entwerfen, ist die hohe Kunst." und weil mir das immer wieder so auf der Zunge liegt: _Genau deshalb_ steigen mir bei der gängigen Art, wie viele Programmierer in PHP bei 'if' oder 'foreach' die geschweiften Klammern setzen, die Grausbirnen auf. Schon bei einem Miniaturbeispiel ist doch

foo bar foo  
  {  
    bar foo foo  
  }  
bar bar foo  
baar foo bar  
  {  
    foo bar  
      {  
        bar bar  
      }  
  }

auf den ersten Blick viel schneller und einfacher zu erfassen als würde man das Ganze als

foo bar foo{  
    bar foo foo  
    }  
bar bar foo  
baar foo bar{  
    foo bar{  
        bar bar  
        }  
    }

schreiben. Sobald mehr als 1 Klammer gleichzeitig offen ist, geht bei der herkömmlichen Schreibweise das Gefühl, was da jetzt womit zusammengehört und welcher Block zu welcher Bedingung gehört, verloren. Und wenn statt so kurzem sinnfreien Inhalt dann auch noch mehrzeiliger Code steht, ist ein schnelles Verstehen der logischen Zusammenhänge völlig unmöglich. Aber das sehe ich offenbar als _einziger_ Mensch so, weil ob im Manual, in Tutorials oder hier im Forum - es wird immer die 2. Schreibweise verwendet.

Eine letzte Frage noch: In diesem speziellen Fall schreibe ich das Ganz nur für mich persönlich. Da ich nur URLs kompiere und in einem Formulatr einfüge, weiß ich ja, dass hier keine html Tags landen werden. Würdest Du da _trotzdem_ mit htmlspecialchars() arbeiten und wenn ja, wieso?

Mit lieben Grüßen

Melvin Cowznofski

--

Melvin Cowznofski
What – me worry?