IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Comptage de résultat / mysql_num_rows : Outrepasser une close LIMIT x,y


Sujet :

Requêtes MySQL

  1. #1
    Invité
    Invité(e)
    Par défaut Comptage de résultat / mysql_num_rows : Outrepasser une close LIMIT x,y
    Bonjour,

    Je souhaiterai savoir si il est possible d'outrepasser une close LIMIT lors d'une selection de résultat, pour un comptage, sans passer par deux requête disctinctes.

    Problème (Exemple) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM table_resources WHERE resource_state = 1 LIMIT 0, 20;
    la fonction PHP mysql_num_rows() me retournera 20 ou moins, mais ce que je souhaiterais, c'est obtenir dans la foulée, le nombre total de rangées affectées (sans que la close LIMIT soit prise en compte), le tout sans avoir recours à une seconde requête de type COUNT(*).

    J'ai vu qu'il existait une constante SQL_CALC_FOUND_ROWS et une fonction interne FOUND_ROWS() mais l'utilisation n'est pas très clair...


    Merci d'avance pour votre lanterne !

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    il te suffit de faire la requête juste après la requête dont tu veux le compte... (juste après = sans faire d'autre requête entre les deux...)


    http://dev.mysql.com/doc/refman/4.1/...functions.html

  3. #3
    Invité
    Invité(e)
    Par défaut
    Salut,

    Citation Envoyé par Swoög
    il te suffit de faire la requête juste après la requête dont tu veux le compte... (juste après = sans faire d'autre requête entre les deux...)
    Il semblerait que FOUND_ROWS(); exécuté immédiatement après une requête retourne un résultat erroné...

    (MySQL 5, Win32).

    Dans PHPMyAdmin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    # Il y a 100 résultats pour cette requête sans la close LIMIT.
     
    SELECT * FROM table_resource WHERE resource_status = 1 LIMIT 0, 10;
    SELECT FOUND_ROWS();
     
    # FOUND_ROWS va retourner 1
    Je sais pas si PHPMyAdmin exécute une requête entre les deux... Mais bon c'est obscure.

    J'ai essayé la même chose en ligne de commande ainsi que dans un script PHP; FOUND_ROWS me retourne... 10. (ça me retourne enfaite le nombre de résultat spécifié dans la close LIMIT).

    En revanche, le problème est résolu lorsque j'utilise SQL_CALC_FOUND_ROWS dans la requête SELECT (suivie de SELECT FOUND_ROWS()), comme précisé (en alternative, sauf erreur) dans la doc.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT SQL_CALC_FOUND_ROWS * FROM table_resources WHERE resource_status = 1 LIMIT 0, 10;
    SELECT FOUND_ROWS();
     
    # Me retourne 100 !
    C'est bien curieux tout ça .

    Merci pour la doc !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comptage de voxels traversés par une droite 3D
    Par mathieu_t dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 27/04/2005, 16h33
  2. Réponses: 7
    Dernier message: 10/02/2005, 00h13
  3. Affecter résultat SQL d'une requête à une variable
    Par bozolozo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/01/2005, 17h37
  4. Réponses: 3
    Dernier message: 09/12/2004, 12h40
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo