Melvin Cowznofski: MySQL Datensatzzählung mit COUNT(*)

Beitrag lesen

Hallo dedlfix!

Da nimmt man aber nicht eine gleiche zweite Abfrage mit COUNT() sondern SELECT SQL_CALC_FOUND_ROWS ... in der ersten und dann eine zweite mit SELECT FOUND_ROWS();

Jetzt wollte ich das schon zu meinem neuen Standard machen, komme aber jetzt drauf, dass mir das nicht hilft:

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. Wurde für "page" _keine_ Seite übergeben, etwas anderes als Ziffern oder eine Seitenzahl, die es für das Ergebnis nicht geben kann, wird automatisch "page=1" ausgegeben.

Mit einem zweiten SELECT habe ich dann die eigentlichen Daten abgeholt, nämlich genau jene 10 (oder weniger, wenn es die letzten gefundenen Daten sind), die gerade ausgegeben werden.

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.

Ich kann also entweder nur eine fehlende oder Nicht-Ziffern-Übergabe abfangen und mit Deinem Vorschlag arbeiten, oder ich möchte auch noch zu hohe Seitenanzahlen, die es gar nicht geben kann, abfangen, dann _muss_ ich zuerst zählen, um zu wissen, was die höchstmögliche Zahl nach dem LIMIT für die Ausgabe der Datensätze ist. 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?

Bitte korrigiere mich, wenn ich falsch liege!

Mit lieben Grüßen

Melvin Cowznofski

--

Melvin Cowznofski
What – me worry?