Astuce MySQL : nombre de lignes retournées sans clause LIMIT
Par Olivierd. vendredi 9 juin 2006, 17:32. PHP / SQL MySQL | Lien permanent.
Une petite astuce que je viens de découvrir concernant MySQL.
Imaginez que vous avez une requete de type SELECT qui est sensé vous retourner des centaines de lignes. Pour afficher ca correctement à l'utilisateur, vous souhaitez limiter le nombre de résultats retournés à 50 par exemple. Vous allez donc faire quelque chose comme SELECT * FROM matable WHERE (...) LIMIT 0,50 Pour les pages suivantes, la requete sera la même avec un LIMIT 50,50 puis LIMIT 100,50 etc. Le soucis, c'est pour savoir le nombre de pages possible justement. EN clair, combien MySQL aurait retourné de lignes sans la clause LIMIT. Jusqu'à maintenant, il fallait faire deux fois la requete (ou instaurer un break quand on bouclait sur les résultats). Quelle perte de temps (et de bande passante entre votre serveur web et votre serveur SQL, si vous ne voulez afficher que 10 lignes alors que le résultat en retourne un million) ! Il existe une astuce dans MySQL pour éviter de devoir refaire deux fois la requete (et donc économiser de précieuses secondes quand vous utilisez des jointures, et/ou cherchez dans une table immense).
Comment faire :
Faites votre première requete en incluant l'option " SQL_CALC_FOUND_ROWS" :
mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name
-> WHERE id > 100 LIMIT 10;
Vous avez donc vos résultats pour votre première page. Pour récupérer le nombre de ligne total, executez ensuite :
mysql> SELECT FOUND_ROWS();
Et voilà le travail
Cette deuxieme requete sera pratiquement instantanée, puisque MySQL aura gardé la valeur de côté rien que pour vous 
Note: ceci ne marche qu'à partir de MySQL 4.1