MySQL Abfrage mit Limit - wieviel Datensätze wären's ohne Limit?
MudGuard
- datenbank
Hi,
nach längerer Zeit muß ich mal wieder was mit MySQL (5.0) und PHP machen.
Ich hab eine komplizierte Abfrage, deren Ergebnismenge mit LIMIT auf die im Moment benötigten Datensätze reduziert wird.
Ich bräuchte aber zusätzlich noch die Gesamtzahl der Datensätze, die rauskämen, wenn die LIMIT-Klausel nicht vorhanden wäre (für eine Anzeige a la "Sie sehen Datensatz 17 bis 42 von 4711 Datensätzen").
Klar, ich kann einen zweiten Select per
SELECT count(*) FROM table WHERE selbebedingungenwiefürdiedatenabfrage
absetzen.
Gibt es evtl. einen sinnvolleren Weg, die Anzahl der Datensätze zu ermitteln, als den Datenbankserver nochmal die ganzen Bedingungen durchnudeln zu lassen?
mysql_ num_ rows liefert die Anzahl der tatsächlich übertragenen Datensätze, also i.d.R. das, was bei LIMIT als Datenmenge angegeben ist (bzw. weniger "am Ende der Tabelle"). mysql_affected_rows trifft bei einem SELECT gar nicht zu.
Und was anderes habe ich nicht gefunden.
Gibt es doch etwas, was sich bisher erfolgreich vor mir versteckt hat?
Danke im Voraus!
cu,
Andreas
Hi!
Ich hab eine komplizierte Abfrage, deren Ergebnismenge mit LIMIT auf die im Moment benötigten Datensätze reduziert wird.
Ich bräuchte aber zusätzlich noch die Gesamtzahl der Datensätze, die rauskämen, wenn die LIMIT-Klausel nicht vorhanden wäre
SQL_CALC_FOUND_ROWS. Reicht das als Stichwort?
Lo!
Hi,
Hi!
Ich hab eine komplizierte Abfrage, deren Ergebnismenge mit LIMIT auf die im Moment benötigten Datensätze reduziert wird.
Ich bräuchte aber zusätzlich noch die Gesamtzahl der Datensätze, die rauskämen, wenn die LIMIT-Klausel nicht vorhanden wäreSQL_CALC_FOUND_ROWS. Reicht das als Stichwort?
Ich glaube ja.
Wenn ich das richtig verstehe, gebe ich beim eigentlichen Select vor der Spaltenliste noch SQL_CALC_FOUND_ROWS an:
SELECT SQL_CALC_FOUND_ROWS id, bla, blubb FROM table WHERE conditions LIMIT 17,42;
und ermittle dann per
SELECT FOUND_ROWS()
die Gesamtzahl der Zeilen.
Werd ich gleich mal ausprobieren.
Danke!
cu,
Andreas