Lyckligtvis sedan MySQL 4.0.0 kan du använda SQL_CALC_FOUND_ROWS
alternativet i din fråga som säger till MySQL att räkna det totala antalet rader utan hänsyn till LIMIT
klausul. Du måste fortfarande utföra en andra fråga för att hämta radräkningen, men det är en enkel fråga och inte lika komplex som din fråga som hämtade data. Användningen är ganska enkel. I din huvudfråga måste du lägga till SQL_CALC_FOUND_ROWS
alternativet precis efter SELECT
och i den andra frågan måste du använda FOUND_ROWS()
funktion för att få totalt antal rader. Frågor skulle se ut så här:
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
Den enda begränsningen är att du måste anropa den andra frågan direkt efter den första eftersom SQL_CALC_FOUND_ROWS
sparar inte antal rader någonstans. Även om den här lösningen också kräver två frågor är den mycket snabbare, eftersom du bara kör huvudfrågan en gång. Du kan läsa mer om SQL_CALC_FOUND_ROWS och FOUND_ROWS()
i MySQL-dokument.
EDIT: Du bör notera att i de flesta fall är det snabbare att köra frågan två gånger än SQL_CALC_FOUND_ROWS
. se här
REDIGERA 2019:
SQL_CALC_FOUND_ROWS frågemodifierare och medföljande FOUND_ROWS() funktion är utfasade från och med MySQL 8.0.17 och kommer att tas bort i en framtida MySQL-version.
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows
Vi rekommenderar att du använder COUNT
istället
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;