dedlfix: MySQL Datensatzzählung mit COUNT(*)

Beitrag lesen

Tach!

Bei der seitenweisen Ausgabe von Datenbank Suchergebnissen wie zB. 10 Datensätzen pro Seite übergebe ich die Seitennummer per GET: www.example.com/results.php?page=3
Bisher habe ich zuallererst mit einem SELECT COUNT(*) alle Suchergebnisse gezählt und errechnet, wie viele Seiten das sind.

Warum musst du dazu die Gesamtanzahl der Datensätze wissen? Welche Datensätze in der Ausgabe sein sollen, errechnet sich aus der gewünschten Seite und der Zahl der Datensätze pro Seite. Die Gesamtzahl braucht man erst für den Pager.

Die Überprüfung der übergebenen Seitennummer kann ich mit SELECT SQL_CALC_FOUND_ROWS und SELECT FOUND_ROWS() aber nicht machen, weil sich da die Katze in den Schwanz beißt, da im SELECT ja schon mit LIMIT festgelegt wird, welche 10 Datensätze geholt werden.

Was willst du da noch mehr als nötig überprüfen? Unsinnige Werte (negative Zahlen, Buchstaben) kann man ebenso, wie wenn nichts angegeben wurde, zu Seite 1 werden lassen. Werte größer als effektiv Seiten vorhanden sind, ergeben eine leere Ergebnismenge. Das ist nicht mein Problem, wenn der Anwender vom System nicht vorgesehene Änderungen vornimmt. Wenn er da Unsinn anstellt, betrifft mich das ebensowenig wie wenn er beispielsweise unsinnige oder nicht vorhandene Suchbegriffe verwendet. Hauptsache die Pager-Links arbeiten korrekt und es gibt keine Injection- oder andere Probleme für die Integrität des Datenbestands.

Wie sonst soll es sonst möglich sein, bei zB. 30 betroffenen Datensätzen, wo es bei einer Ausgabe von 10 pro Seite nur 3 Seiten geben kann, ein "page=5" abzufangen und automatisch zu einem "page=1" werden zu lassen?

Warum wird das dann zu Seite 1 und nicht zu Seite 3 oder auch in der Mitte oder anderswo dazwischen (bei mehr als 3)? Ich finde es genausowenig nützlich, nach mehr als der vorhandenen Seitenzahl zu fragen, wie dann irgendwas zu liefern.

Bitte korrigiere mich, wenn ich falsch liege!

Du liegst nicht falsch, machst dir aber aus meiner Sicht hier zu viel Arbeit mit dem Überprüfen der Werte. Garbage in, Garbage out. Ich muss nicht alles korrigieren, was der Anwender falsch macht.

dedlfix.