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;