PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anzahl in Schleife ermitteln


xabbuh
23.05.2003, 16:56:58
Folgendes:
Ich habe eine Datenbank, die als Grundlage für einen Katalog dient.

Diese Datenbank hat folgende Spalten: ID, rubrik_ID, datum

Nun wird unterschieden zwischen Rubriken und Objekten. Rubriken sind die Oberkategorie unter die die Obejekte dann sortiert werden.

Wenn ich also eine neue Rubrik hinzufüge, bekommt diese die rubrik_ID 0, damit erkannt wird, dass es sich um eine Rubrik und nicht um ein Objekt handelt. Die ID wird mittels auto_increment automatisch erstellt, unter datum wird die Zeit eingetragen, die gerade ist.

Wenn man eine neues Objekt erstellt wird nun bei rubrik_ID die ID der Rubrik eingetragen zu der dieses Objekt gehören soll.

Beispiel:

Rubriken: Tisch, Stuhl
Objekte: Stuhl 1, Stuhl 2

Tisch: ID: 1, rubrik_ID: 0, datum: 1053701130
Stuhl: ID: 2, rubrik_ID: 0, datum: 1053701220

Stuhl 1: ID: 4, rubrik_ID: 2, datum: 1053701230
Stuhl 2: ID: 5, rubrik_ID: 2, datum: 1053701630

Auf der Startseite gebe ich nun in einer while-Schleife die Rubriken aus.

Nun möchte ich aber, dass hinter jeder Rubrik auch angezeigt wird, wieviele Objekte zu dieser Kategorie gehören.

An der Stelle komme ich nicht weiter. Wäre nett wenn jemand eine Idee hätte.

Gweilo
23.05.2003, 17:37:54
$result = mysql_query ("SELECT COUNT(*) FROM tabelle WHERE rubrik_ID='2'");

mit diesem befehl kannst du die Anzahl ermitteln

xabbuh
23.05.2003, 18:19:23
Original geschrieben von Gweilo
$result = mysql_query ("SELECT COUNT(*) FROM tabelle WHERE rubrik_ID='2'");



Das Problem ist nur, dass ich die Anzahl der Objekte nicht nur für die Rubrik 2 sondern für alle Rubriken ermitteln möchte.

Gweilo
23.05.2003, 18:23:02
dann lässt du ganz einfach WHERE rubrik_ID='2' weg.

xabbuh
23.05.2003, 18:32:54
Vielen Dank! Ich werde das mal ausprobieren.

Noch eine Frage: Wie ermittel ich den neuesten Eintrag jeder Rubrik?

Gweilo
23.05.2003, 19:19:23
$result = mysql_query ("SELECT * FROM tabelle WHERE rubrik_ID='2' ORDER BY id DESC");

oder
ORDER BY datum DESC, wobei datum ein timestamp des eintragedatums ist, falls du dieses speicherst.

am besten du liest mal das MySQL handbuch durch, da steht alles drin

xabbuh
23.05.2003, 20:03:11
Ich glaube ich habe mich missverständlich ausgedrückt. Es geht mir jetzt nicht darum nur allgemein die Anzahl zu ermittlen oder das letzte Objekt sondern folgendes zu bewerkstelligen:

Eine Tabelle in der alle Rubriken untereinander aufgelistet werden. Alles kein Problem. Allerdings soll in jeder Zeile hinter dem Namen der Rubrik noch stehen, wieviele Objekte in dieser Rubrik vorhanden sind und welches das zuletzt eingefügte Objekt ist:

Rubrik 1 0 keine Objekte
Rubrik 2 2 Stuhl 2

Die Rubriken geben ich folgendermaßen aus:

while($rubrik=mysql_fetch_array($result)){

"<p>" . echo $rubrik['rubrik_ID'] . "</p>";

}

For der Schleife wurden die Rubriken natürlich noch aus der Datenbank ausgewählt.

Mein Problem ist, dass ich es nicht hinkriege innerhalb der Schleife zu ermitteln, wieviele Objekte es nun jeweils zu jeder Rubrik gibt.

Gweilo
25.05.2003, 21:52:57
Vermutlich habe ich dich jetzt wieder falsch verstanden, aber ich versuch jetzt trotzdem mal deine Fragen zu beantworten:

Allerdings soll in jeder Zeile hinter dem Namen der Rubrik noch stehen, wieviele Objekte in dieser Rubrik vorhanden sind und welches das zuletzt eingefügte Objekt ist:
$result = mysql_query ("SELECT COUNT(*) FROM tabelle WHERE rubrik_ID='$rubrik[0]'");
Für das zuletzt eingefügte objekt kannst du wie ich oben bereits schrieb:
$result = mysql_query ("SELECT * FROM tabelle WHERE rubrik_ID='$rubrik[0]' ORDER BY id DESC LIMIT 1");

$rubrik[0] wird ja bei jedem while-schleifen-durchgang neu ermittelt (id der momentanen Rubrik) Daraus wird dann die Anzahl und das Letzte element ermittelt (in der while schleife).

Ich hoffe ich habe deine Fragestellung richtig verstanden (eigentlich hatte ich ja vorhin genau das selbe geschrieben...).

xabbuh
26.05.2003, 12:53:05
Hatte dich da falsch verstanden. Habe deine Lösung jetzt auch so angewandt. Allerdings zeigt er mir nun folgenden Fehler an:
Resource id #11