zählen von x-inhalten je kategorie in DB
Andre
- programmiertechnik
0 Frank (no reg)
Hallo,
ich benötige einen kleinen Denkanstoß... folgendes Problem:
in einer Tabelle sind Inhalte aus verschiedenen Kategorien abgelegt. Ich möchte nun ermitteln, wie häufig die unterschiedlichen Kategorien in der Tabelle vorkommen.
wert1 # 12
wert1 # 0
wert5 # 43
wert2 # 23
wert2 # 20
wert1 # 2
das Ergebnis aus der Beispieltabelle sollte dann wie folgt lauten:
wert1 = 3;
wert2 = 2;
wert5 = 1
Ich arbeite mit PHP und MySQL und suche eine möglichst elegante Methode. Hoffe ihr könnt mir ein paar nützliche Anregungen geben.
Gruß, André
Hi,
der Weg zur Lösung deines Problems führt über die Aggregatfunktionen COUNT(..) und GROUP BY
Recherchiere bitte im Internet (mySQL Manual) nach der Anwendungsweise dieser Funktionen.
Ciao, Frank
der Weg zur Lösung deines Problems führt über die Aggregatfunktionen COUNT(..) und GROUP BY
...das hört sich schonmal gut an. Vielen Dank für den Tipp.
hmm, ich habe das jetzt mal probiert:
$t1 = "tpl_gga_kommentar";
$t2 = "tpl_gga_games";
$db->query( "SELECT t2.titel,
t2.id,
t1.game_id,
COUNT(*)
FROM $t2 t2, $t1 t1
WHERE t1.game_id = t2.id
AND t1.status = 1
GROUP BY t1.game_id" );
das ist jetzt mein Ansatz, allerdings bringt es mir "scheinbar" noch nicht das gewünschte Ergebnis. Wie bekomme ich jetzt das Ergebnis von Count(*) ? Nochmal zum Verständnis: Ich benötige die Anzahl von abgegebenen Kommentaren aus T1 -> und dafür (per t1.game_id<->t2.id) den Titel und eben die id. In der Ausgabe soll es dann später so aussehen, das die Titel mit den meisten Kommentaren oben stehen (absteigend).
PS: im Websitelink kann man die aktuelle Ausgabe sehen... darunter ein Dummy, der zeigt wie es in etwa aussehn soll.
Ich hoffe ihr könnt mich nochmal erleuchten.
Gruß, André
So nochmal:
$t1 = "tpl_gga_kommentar";
$t2 = "tpl_gga_games";
$db->query( "SELECT t2.titel,
t2.id,
t1.game_id,
COUNT(*)
FROM $t2 t2, $t1 t1
WHERE t1.game_id = t2.id
AND t1.status = 1
GROUP BY t1.game_id" );
bin mittlerweile dahinter gekommen dass das Ergebnis jeweils in COUNT(*) enthalten ist... -> das hatte ich dann wohl falsch verstanden... jetzt habe ich also alle Daten die ich brauche. Wenn ich jetzt in dieser Abfrage noch sagen könnte ich will die Werte nach COUNT(*) absteigend sortiert ausgegeben bekommen, dann wäre ich glücklich.
Ein ORDER BY ... dranhänge klappt leider nicht.
Gruß, André
Hi,
zum Sortieren kannst du einfach das Count(*) mit einem Alias versehen und diesen dann für die Sortierung verwenden à la
$db->query( "SELECT t2.titel,
t2.id,
t1.game_id,
COUNT(*) AS hits
FROM $t2 t2, $t1 t1
WHERE t1.game_id = t2.id
AND t1.status = 1
GROUP BY t1.game_id"
ORDER BY hits ASC);
Mit mySQL kenne ich mich in Bezug auf was in SQL unterstützt wird nicht wirklich aus, auf anderen DBs (MS SQL) funktioniert dies aber soweit ich mich erinnere. Also daher keine Garantie ... einfahc mal versuchen.
Ciao, Frank
Mit mySQL kenne ich mich in Bezug auf was in SQL unterstützt wird nicht wirklich aus, auf anderen DBs (MS SQL) funktioniert dies aber soweit ich mich erinnere. Also daher keine Garantie ... einfahc mal versuchen.
Super, das hat einwandfrei funktioniert. Vielen, vielen Dank für deine Hilfe.
Grüße, André
bitte, gern geschehen!
Gut Nacht, Frank