Na szczęście od MySQL 4.0.0 możesz używać SQL_CALC_FOUND_ROWS
opcja w zapytaniu, która powie MySQL, aby zliczył całkowitą liczbę wierszy bez uwzględnienia LIMIT
klauzula. Nadal musisz wykonać drugie zapytanie, aby pobrać liczbę wierszy, ale jest to proste zapytanie i nie tak złożone, jak zapytanie, w którym pobrano dane. Użycie jest dość proste. W głównym zapytaniu musisz dodać SQL_CALC_FOUND_ROWS
opcja tuż po SELECT
a w drugim zapytaniu musisz użyć FOUND_ROWS()
funkcja, aby uzyskać całkowitą liczbę wierszy. Zapytania wyglądałyby tak:
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
Jedynym ograniczeniem jest to, że drugie zapytanie należy wywołać bezpośrednio po pierwszym, ponieważ SQL_CALC_FOUND_ROWS
nie zapisuje nigdzie liczby wierszy. Chociaż to rozwiązanie wymaga również dwóch zapytań, jest znacznie szybsze, ponieważ główne zapytanie wykonujesz tylko raz. Możesz przeczytać więcej o SQL_CALC_FOUND_ROWS i FOUND_ROWS()
w dokumentacji MySQL.
EDYTUJ: Należy zauważyć, że w większości przypadków dwukrotne uruchomienie zapytania jest w rzeczywistości szybsze niż SQL_CALC_FOUND_ROWS
. zobacz tutaj
EDYCJA 2019:
Modyfikator zapytania SQL_CALC_FOUND_ROWS i towarzysząca mu funkcja FOUND_ROWS() są przestarzałe w wersji MySQL 8.0.17 i zostaną usunięte w przyszłej wersji MySQL.
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows
Zalecane jest użycie COUNT
zamiast tego
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;