Glücklicherweise können Sie seit MySQL 4.0.0 SQL_CALC_FOUND_ROWS
verwenden Option in Ihrer Abfrage, die MySQL anweist, die Gesamtzahl der Zeilen ohne Berücksichtigung von LIMIT
zu zählen Klausel. Sie müssen immer noch eine zweite Abfrage ausführen, um die Zeilenanzahl abzurufen, aber es ist eine einfache Abfrage und nicht so komplex wie Ihre Abfrage, die die Daten abgerufen hat. Die Verwendung ist ziemlich einfach. In Ihrer Hauptabfrage müssen Sie SQL_CALC_FOUND_ROWS
hinzufügen Option direkt nach SELECT
und in der zweiten Abfrage müssen Sie FOUND_ROWS()
verwenden Funktion, um die Gesamtzahl der Zeilen zu erhalten. Abfragen würden wie folgt aussehen:
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
Die einzige Einschränkung besteht darin, dass Sie die zweite Abfrage unmittelbar nach der ersten aufrufen müssen, da SQL_CALC_FOUND_ROWS
speichert nirgendwo die Anzahl der Zeilen. Obwohl diese Lösung auch zwei Abfragen erfordert, ist sie viel schneller, da Sie die Hauptabfrage nur einmal ausführen. Sie können mehr über SQL_CALC_FOUND_ROWS und FOUND_ROWS()
in MySQL-Dokumentation.
BEARBEITEN: Beachten Sie, dass das zweimalige Ausführen der Abfrage in den meisten Fällen tatsächlich schneller ist als SQL_CALC_FOUND_ROWS
. siehe hier
EDIT 2019:
Der SQL_CALC_FOUND_ROWS-Abfragemodifikator und die zugehörige FOUND_ROWS()-Funktion sind ab MySQL 8.0.17 veraltet und werden in einer zukünftigen MySQL-Version entfernt.
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows
Es wird empfohlen, COUNT
zu verwenden stattdessen
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;