Pagination mit PHP und MySQL

Kommentieren Dec 03 2009 .txt, .json, .md

Jeder kennt ja die Pagination bzw. die Blätterfunktion für die Anzeige einer Liste.

Man will ja nicht immer alle Daten auslesen, sondern nur die die auch auf der Seite angezeigt werden sollen.

Bisher führt man ja die Abfrage 2 mal aus. Einmal mit LIMIT und einemal ohne. Ansonsten kommt man ja nicht an die Anzahl der Einträge um herauszufinden wie viele Seiten es denn gibt.

Damit hat man aber eine Abfrage 2 mal ausgeführt und das kann bei vielen Datenbeständen zu Problemen führen. ( ich rede hier im 1000+ Bereich )

Nun gibt es aber ab MySQL 5.0 4.1 eine neue Variable die man schon im SELECT Statement mitgeben kann.

SQL_CALC_FOUND_ROWS

Dies kann man dann mit der folgenden Funktion abgfragen.

FOUND_ROWS()

Ich werde das nicht nochmals wiederholen, dann in der Manual ist das schön erklart:

A SELECT statement may include a LIMIT clause to restrict the number of rows the server returns to the client. In some cases, it is desirable to know how many rows the statement would have returned without the LIMIT, but without running the statement again. To obtain this row count, include a SQL_CALC_FOUND_ROWS option in the SELECT statement, and then invoke FOUND_ROWS() afterward: (…)

Damit spart man performance, denn man muss die selbe Abfrage nicht 2 mal machen und PHP muss nicht nochmals das Ergebnis der Abfrage bearbeiten.