[MySQL/PHP] count(*) mit verschiedenen Bedingungen

Astrodan

Gamma Cephei
ID: 119839
L
10 Dezember 2006
1.113
209
Hallo,

ich habe hier eine Datenbank mit ein paar Gästebucheinträgen. Nun haben diese Gästebucheinträge immer einen Status (enum-Feld) 'mod' oder 'ok', um anzuzeigen, ob es sich um genehmigte Beiträge handelt oder um noch zu moderierende.

Jetzt würde ich gern im Admin-Menü anzeigen können, wie viele Beiträge von jedem Typ vorhanden sind, sowie wie viele insgesamt. Mein Ansatz wäre aktuell
PHP:
$result = mysql_query("SELECT count(id) FROM `guestbook`");
// Auswerten
$result = mysql_query("SELECT count(id) FROM `guestbook` WHERE status = 'mod'");
// Auswerten
$result = mysql_query("SELECT count(id) FROM `guestbook` WHERE status = 'ok'");
// Auswerten

Das funktioniert zwar ziemlich sicher, aber ist wohl doch etwas übertrieben, wenn man für drei Zahlen drei Queries machen muss. Allerdings kenne ich keine bessere Variante, gibt es da etwas, was ich nicht weiß (Was natürlich durchaus möglich wäre, bin kein großer MySQL Held ;) )?
 
Zuletzt bearbeitet:
Probier mal:
Code:
SELECT COUNT(*) AS total_count, SUM(status='mod') AS mod_count, SUM(status='ok') AS ok_count
FROM guest_book
 
PHP:
SELECT status,count(id) AS anzahl FROM `guestbook` GROUP BY status WITH ROLLUP

gibt dir 3 datensätze zurück... einmal mit status ok und mod... und ein wo status leer ist, dass ist die gesammt anzahl. geht aber erst ab mysql 5... ansonsten musst du das WITH ROLLUP rausnehmen und im script die bieden datensätze addieren für die gesamtanzahl.
 
Probier mal:
Code:
SELECT COUNT(*) AS total_count, SUM(status='mod') AS mod_count, SUM(status='ok') AS ok_count
FROM guest_book

Cool, scheint zu gehen.
Danke euch beiden.

@ZeroCCC: Gut, deins sieht eleganter aus, aber das ist nicht mein Webspace, und ich bezweifel, dass dort eine MySQL 5 Db drauf läuft. Und wegen eines Queries den Betreiber um einen Serverwechsel zu bitten, ist dann vielleicht doch etwas übertrieben ;-)
 
@ZeroCCC: Gut, deins sieht eleganter aus, aber das ist nicht mein Webspace, und ich bezweifel, dass dort eine MySQL 5 Db drauf läuft. Und wegen eines Queries den Betreiber um einen Serverwechsel zu bitten, ist dann vielleicht doch etwas übertrieben ;-)

eleganter naja... tleilax lösung ist aber defintiv handlicher, da du das ergebniss gleich als ein array erhällst.