Heureusement depuis MySQL 4.0.0 vous pouvez utiliser SQL_CALC_FOUND_ROWS
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 il s'agit d'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
juste après l'option SELECT
et dans la deuxième requête, vous devez utiliser FOUND_ROWS()
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 de MySQL.
EDIT : Vous devez noter que, dans la plupart des cas, exécuter la requête deux fois est plus rapide que SQL_CALC_FOUND_ROWS
. voir aquí
EDIT 2019 :
Le modificateur de requête SQL_CALC_FOUND_ROWS et la fonction FOUND_ROWS() qui l'accompagne sont obsolètes depuis MySQL 8.0.17 et seront supprimés dans une prochaine version de MySQL.
https://dev.mysql.com/doc/refman/8.0/en/information-functions.html#function_found-rows
Il est recommandé d'utiliser COUNT
au lieu de
SELECT * FROM tbl_name WHERE id > 100 LIMIT 10;
SELECT COUNT(*) WHERE id > 100;