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

PHP & Base de données Discussion :

Nombre d'éléments récupérés avec un SELECT


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut Nombre d'éléments récupérés avec un SELECT
    Bonjour,

    Je viens de me mettre à PDO et je me demandais si il existait un équivalent à mysql_num_rows() car je n'en vois pas dans la doc PHP.

    Bien sur je pourrais utiliser une requête avec COUNT() mais ça oblige à faire une 2ème requête...

    Merci

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    La doc préconise une 2e requête SELECT COUNT( ) http://fr.php.net/manual/en/pdostatement.rowcount.php
    Autrement tu peux faire un count($statement->fetchAll( ))

  3. #3
    Rédacteur
    Avatar de jsd03
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2008
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Août 2008
    Messages : 1 221
    Par défaut
    Au vu de la réponse de Sèb., je dirais que le plus rapide serait de faire une seconde requête avec un SELECT count()... parce que faire count($statement->fetchAll( )) puis un $statement->fetchAll( ) par la suite revient à faire deux fois la requête, qui si elle renvoit beaucoup de ligne peut ralentir considérablement le traitement.
    Google est ton ami mais ton voisin aussi

    Modérateur BI - Responsable Talend
    Mes tutoriels - FAQ Talend - FAQ SQL*Plus

    Avant toute chose : lire le mode d'emploi du forum et ses règles.
    Suivez @Developpez sur twitter !

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    parce que faire count($statement->fetchAll( )) puis un $statement->fetchAll( )
    heu il faut evidemment recuperer le resultat du fetchAll()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $result = $sth->fetchAll();
    $nbre = count($result);
    foreach ($result as $row) {
    }
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Je pense que la méthode du fetchAll() est la mieux.

    Parce que 2 requêtes, sur un serveur qui est déjà assez chargé je pense que ce n'est pas ce qu'il y a de mieux.

    C'est vraiment dommage que le rowCount ne renvoi pas la valeur à tous les coups.
    D'ailleurs il est écrit que pour certaines BDD, le nombre est renvoyé. Qu'en est il pour MySQL, la valeur est elle renvoyé ? Y a t il quelque chose à paramétrer pour que cela fonctionne ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    178
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 178
    Par défaut
    Tout dépend de la requête.

    Si vous faites de la pagination sur un très gros résultat, par exemple résultats 1-10, 11-20, ... 51-60... sur un total de 500 000 lignes, je vois mal faire un SELECT sur les 500000 lignes puis un count du fetchAll alors que l'on en affiche que 10 ! Dans ce cas il FAUT faire une deuxième requête SELECT COUNT(*), sinon le serveur de base de données et le réseau vont souffrir !

    Par contre, si le résultat comporte peu de lignes toutes affichées à l'écran, là effectivement il vaut mieux faire un count sur le tableau renvoyé par fetchAll.

Discussions similaires

  1. [XL-2010] Nombre d'éléments distincts avec plusieurs conditions
    Par Altasis dans le forum Excel
    Réponses: 10
    Dernier message: 09/02/2013, 14h45
  2. création boucle avec x nombre d'éléments
    Par masky dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/09/2007, 09h55
  3. [AJAX] Compter le nombre d'élément d'un page.select ?
    Par titoumimi dans le forum Ruby on Rails
    Réponses: 21
    Dernier message: 09/05/2007, 12h48
  4. Nombre d'éléments d'un <select> à l'ouverture
    Par philippe123 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 25/07/2006, 16h59
  5. Compter nombre d'éléments avec valeur X dans un formulaire
    Par p0Kep0K dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 24/11/2005, 15h49

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