Connaitre le nombre de résultat d’une requete MySQL sans la clause LIMIT

Voici aujourd’hui une petite astuce MySQL qui m’a bien aidé à alléger mes scripts !

Je vous mets en situation avec le cas typique : vous voulez afficher un grand nombre de résultat. La façon de procéder s’impose d’elle même, vous déciderez sûrement d’étaler ces résultats sur plusieurs pages. Sur chaque page vous n’affichez donc que n résultats, mais ils vous faudra néanmoins connaître le nombre de résultat total pour savoir combien de page afficher.

Vous aurez donc une requête du type :

SELECT * FROM table1 LIMIT n;

Et pour connaître le nombre de résultat total, vous vous servirez peut-être d’une requête du style :

SELECT COUNT(*) FROM table1;

Seulement voilà cette façon de faire utilise deux requêtes et est plutôt consommatrice en ressource ! Heureusement les développeurs de MySQL ont pensé à tout et la solution se trouve (comme toujours) dans la documentation. Celle ci est assez simple, elle consiste à modifier la première requête comme suit :

SELECT SQL_CALC_FOUND_ROWS * FROM table1 LIMIT n;

Puis à appeler la fonction FOUND_ROWS() :

SELECT FOUND_ROWS();

Cette dernière vous donnera le nombre de ligne de la première requête dans le cas où vous n’auriez pas utilisé la clause LIMIT et cela en consommant bien moins de ressource que pour la première solution !

Comme il est agréable de tomber sur des réponses si simple à nos problèmes ! J’espère que cela vous aidera si vous rencontrez le même un jour…

Tags : ,

Articles relatifs :

Publicités

3 commentaires

  1. Mathieu
    Publié le 24 décembre 2008 à 9:45 | Lien permanent

    Un grand merci pour cette astuce que je vais m’empresser de tester !

  2. Publié le 18 juin 2009 à 13:17 | Lien permanent

    Merci pour l’astuce.
    J’ai vu des scripts utilisant plutôt la fonction php sizeof().

    C’est mieux, c’est moins bien ?

  3. Publié le 18 juin 2009 à 13:58 | Lien permanent

    sizeof() ou count() permet de savoir combien de lignes la requete a renvoyé. Ce qui veut dire que l’on devrait compter le nombre de ligne de “SELECT * FROM table1″ sans “LIMIT n” sinon le résultat serait faussé.

    Ce qui revient à “SELECT COUNT(*) FROM table1;”, c’est même surement plus consommateur puisqu’on récupère dans PHP un tableau contenant tout les résultats dont on compte le nombre… Pour en afficher seulement “n” et jeter les autres…

    Bref une seule requête SQL au lieu de deux mais un traitement moins optimisé.

Laisser un commentaire

Votre adresse email ne sera jamais publiée ou revendue à des tiers. Les champs requis sont marqués d'un *.

*
*