Rolf b: mysql count

Beitrag lesen

Erster Hinweis: Das PHP Paket mysql ist deprecated, du solltest auf mysqli umstellen. Siehe www.php.net.

Zweiter Hinweis, von hier

Wenn Sie mysql_unbuffered_query() verwenden, liefert mysql_num_rows() solange nicht den korrekten Wert, bis Sie alle Zeilen der Ergebnismenge erhalten haben.

Heißt: Wenn Du im buffered-Modus bist, saugt sich dein erster Select die komplette Treffermenge einmal vom Server ins PHP und schmeißt sie gleich danach wieder weg. Gut, dass Du nach einem besseren Weg suchst :)

Wenn das deine Query ist

select a,b,c,d FROM tabelle where bedingung1 AND bedingung2 AND bedingung3

dann bestimmst Du so die Anzahl der Trefferzeilen und bleibst damit komplett im SQL Server.

select count(*) FROM tabelle where bedingung1 AND bedingung2 AND bedingung3

Du bekommst eine Row mit einer namenlosen Spalte zurück (die Du natürlich benennen kannst, wenn Du z.B. count(*) as Anzahl schreibst.

Je nach Komplexität der Bedingungen und Tabellengröße strengt das den Server auch ein wenig an, aber eventuell kann er die Anzahl allein per Index-Scan bestimmen ohne die eigentlichen Tables zu lesen. Hängt von deinen Bedingungen und deinen Indexen ab. Musst Du ggf. beobachten; und wenn das zu lange dauert, musst Du Dir überlegen auf eine "Präzisionsaussage" bezüglich der Gesamtzahl zu verzichten, die Anzahl nur einmal zu bestimmen und dann in der User-Session festzuhalten.

Rolf