Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

PHP mit MYSQL. ENUM und mysql_num_rows. Kategorien aufzälen





Frage

Ich habe ein Tabelle in deiner mysql Datenbank erstellt mit den Felder: NAME und CATEGORY. Ich habe 3 werte deklariert, und mit einer ENUM funktion 2 categorys deklariert (a/b) Jetzt moeche ich auf einer webseite folgendes haben: category_a(2), category_b(1) 2 und 1 stehen fuer die eintraege in jeder kategorie. Wie koennte ich das jetzt variabel machen, das ich auch 30 kategorien deklarien kann, das dann auf der webseite diese 20 stehen und in klammer die jeweiligen eintraege dieser Kategorie. = ($eintraege). Hilfe.. das schaff ich nicht.. Ich habe das schon versucht: PHP-Code: $query = ´SELECT `cat` FROM `p_am` ORDER BY `id` ASC LIMIT 0, 30´; for ($i = 0; $i < mysql_num_rows($result); $i++) { $cat = mysql_result($result, $i, "cat"); if ($cat == "category_a"){ $num = $num + "1"; } } echo $cat . ´(´ . $num . ´)´ . ´<br>´; Das geht aber nur bei einer oder zwei kategorien, ich muesste jedes mal diese line verraender im code: if ($cat == "category_a"){, weil ich ja noch kategorie b und spaeter auch c,d,e,f,g und ich moechte nicht jedes mal den code veraendern. Wie geht das variabel? Das ich einfach im mysql eine neue kategorie(in ENUM) deklarien kann und auf der webseite automatisch diese kategorie inkl ($eintraege) kommt. Danke im vorraus. SonyOnfire

Antwort 1 von hepna

Hi,

leider weiß ich nicht, ob ich Dein Problem genau verstanden habe aber ich versuch´s mal mit nem Vorschlag:

- Alle Werte in ein Array
- Array sortieren
- Array durchlaufen und jeweils so lange zählen, bis der nächste Wert ein anderer ist als der Aktuelle (d.h. neue Kategorie)

Gruß
hepna

Antwort 2 von tmp

Hallo!

Was du schreibst, klingt nicht nach Normalisierung ... siehe: http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

Fang mal damit an, alle Kategorien in einer eigenen Tabelle zu speichern (mit zusätzlichem Feld, einen integer mit auto_increment, => Primary Key). Diese zusätzliche ID schreibst du dann zu den jeweiligen passenden Eintrag in der Ursprungstabelle.
Weiterer Vorteil: Wenn du das Kategorie-Feld in enum machst, müsstest du bei jeder neuen Kategorie die Feld-Definition ändern. Nimm den gleichen Datentyp wie die zusätzliche ID der Kategorie.

tbl_kategorie
id, name, beschreibung

tbl_eintrag
id, name, fk_kategorie

So kannst du beliebig viele Kategorien speichern und je nach Wunsch anzeigen.

Kategorien anzeigen:
select id, name from tbl_kategorie

Einträge einer bestimmten Kategorie anzeigen:
select id, name from tbl_eintrag where fk_kategorie = ´ $kat ´
Das Ergebnis dieser Abfrage kannst du natürlich auch in ein Array speichern und dann schön sortieren ... beachte dabei aber die Reihenfolge ... es gibt in einem Array nur eindeutige Schlüssel.

MfG