Heureusement depuis MySQL 4.0.0 vous pouvez utiliser SQL_CALC_FOUND_ROWS
option dans votre requête qui indiquera à MySQL de compter le nombre total de lignes sans tenir compte de LIMIT
clause. Vous devez toujours exécuter une deuxième requête afin de récupérer le nombre de lignes, mais c'est une requête simple et pas aussi complexe que votre requête qui a récupéré les données. L'utilisation est assez simple. Dans votre requête principale, vous devez ajouter SQL_CALC_FOUND_ROWS
option juste après SELECT
et dans la deuxième requête, vous devez utiliser FOUND_ROWS()
fonction pour obtenir le nombre total de lignes. Les requêtes ressembleraient à ceci :
SELECT SQL_CALC_FOUND_ROWS name, email FROM users WHERE name LIKE 'a%' LIMIT 10;
SELECT FOUND_ROWS();
La seule limitation est que vous devez appeler la deuxième requête immédiatement après la première car SQL_CALC_FOUND_ROWS
n'enregistre le nombre de lignes nulle part.Bien que cette solution nécessite également deux requêtes, elle est beaucoup plus rapide, car vous n'exécutez la requête principale qu'une seule fois.Vous pouvez en savoir plus sur SQL_CALC_FOUND_ROWS et FOUND_ROWS()
dans la documentation MySQL.
MODIF : Vous devez noter que dans la plupart des cas, exécuter la requête deux fois est en fait plus rapide que SQL_CALC_FOUND_ROWS
. voir ici
MODIFICATION 2019 :
Le modificateur de requête SQL_CALC_FOUND_ROWS et la fonction FOUND_ROWS() qui l'accompagne sont obsolètes à partir de MySQL 8.0.17 et seront supprimés dans une future version de MySQL.
https://dev.mysql.com /doc/refman/8.0/en/information-functions.html#function_found-rows
Il est recommandé d'utiliser COUNT
à la place
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;