MudGuard: MySQL Abfrage mit Limit - wieviel Datensätze wären's ohne Limit?

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

--
Warum nennt sich Andreas hier MudGuard?
O o ostern ...
Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
  1. 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!

    1. 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äre

      SQL_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

      --
      Warum nennt sich Andreas hier MudGuard?
      O o ostern ...
      Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.