sql >> Databasteknik >  >> RDS >> Mysql

Få totalt antal rader när du använder LIMIT?

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;



  1. Databasernas historia

  2. Felaktigt strängvärde när du försöker infoga UTF-8 i MySQL via JDBC?

  3. Bifoga strängar i enstaka citattecken i SQLite-frågeresultat

  4. Hur man installerar Adminer på sin egen app