Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni il numero totale di righe quando usi LIMIT?

Fortunatamente da MySQL 4.0.0 puoi usare SQL_CALC_FOUND_ROWS opzione nella tua query che dirà a MySQL di contare il numero totale di righe ignorando LIMIT clausola. È comunque necessario eseguire una seconda query per recuperare il conteggio delle righe, ma è una query semplice e non complessa come la query che ha recuperato i dati. L'utilizzo è piuttosto semplice. Nella tua query principale devi aggiungere SQL_CALC_FOUND_ROWS opzione subito dopo SELECT e nella seconda query devi usare FOUND_ROWS() funzione per ottenere il numero totale di righe. Le query sarebbero simili a questa:

SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;

SELECT FOUND_ROWS();

L'unica limitazione è che devi chiamare la seconda query subito dopo la prima perché SQL_CALC_FOUND_ROWS non salva il numero di righe da nessuna parte.Sebbene questa soluzione richieda anche due query, è molto più veloce, poiché esegui la query principale solo una volta.Puoi leggere di più su SQL_CALC_FOUND_ROWS e FOUND_ROWS() nei documenti MySQL.

MODIFICA: Dovresti notare che nella maggior parte dei casi l'esecuzione della query due volte è in realtà più veloce di SQL_CALC_FOUND_ROWS . vedere qui

EDIT 2019:

Il modificatore di query SQL_CALC_FOUND_ROWS e la relativa funzione FOUND_ROWS() sono obsoleti a partire da MySQL 8.0.17 e verranno rimossi in una futura versione di MySQL.

https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows

Si consiglia di utilizzare COUNT invece

SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;