dedlfix: MySQL anzahl der Zeilen

Beitrag lesen

Hi!

Ich muss sehr oft abfragen, wie viele Zeilen in einer Tabelle vorhanden sind.
$sql="SELECT id,userid,title,content FROM pm WHERE myid='".$MyID."';";
$result=mysql_query($sql) OR DIE (mysql_error());

or die() ist üblicherweise keine angemessene Fehlerbehandlung. Der Anwender kann für einen DBMS-Fehler meist nichts und sollte eine Alternative geboten bekommen, und keine mit einer Fehlermeldung abgebrochene Ausgabe.

$count=mysql_num_rows($result);

Diese Funktion kann nicht raten. Damit sie überhaupt arbeiten kann, müsste MySQL vorab die Ergebnismenge zählen. Das macht aber soweit ich weiß keines der bekannten DBMS. MySQL auch nicht. Aber die in PHP eingebaute MySQL-Client-API greift zu einem Trick: Sie holt bei einem mysql_query() automatisch im Hintergrund alle Datensätze ab und kann sie nun auch zählen. Das Fetchen holt die Datensätze dann nur noch aus dem Puffer.

while ($row=mysql_fetch_assoc($result))

Wenn du die Datensätze sowieso brauchst, dann ist es kein Problem, wenn sie bereits zum Client übertragen wurden.

Nun habe ich aber gelesen, dass das sehr langsam ist. Und man sollte das mit dem Befehl COUNT machen:

Wenn du ausschließlich ihre Anzahl brauchst, dann ist das relevant.

Was stimmt nun? Was ist besser?

Ist es besser, von allen relevanten Daten aus dem Archiv eine Kopie zu holen, um diese zu zählen und anschließend wegzuwerfen? Oder sollte man nicht lieber gleich im Archiv zählen und nur eine Zahl als Ergebnis nach "oben" bringen?

Und wie verhält sich die Sachlage in deinem zweiten Beispiel? Sollte man erstmal alles gewünschte im Archiv suchen und zählen und anschließend erneut suchen und "hochbringen" oder einmal suchen und das Ergebnis nach dem Mitbringen zählen?

Lo!