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 :

Optimisation, SELECT COUNT() ou bien rowCount() [PDO]


Sujet :

PHP & Base de données

  1. #1
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 124
    Par défaut Optimisation, SELECT COUNT() ou bien rowCount()
    Salut

    Je suis débutant en PHP et MySql.
    Depuis un an j’apprends, j'avance mais aujourd'hui, pour passer à la suite j'ai besoin d'être sûr du bien fondé du choix d'une fonction.
    Pour l'instant dans ma table billets, j'ai 22 enregistrements, elle devrait grossir très vite.
    J'ai besoin de savoir combien d'enregistrements existent dans cette table pour pouvoir trouver le nombre de page à afficher.
    j'ai donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    			// Récupération du nombre de billets contenu dans la table
     
    			//$req = $bdd->query('SELECT id FROM billets');
    			//$NbrTot = $req -> rowCount();
    			//  ou si plus rapide ?
    			$NbrTot = $bdd -> query ( "SELECT count(id) FROM billets" )-> fetchColumn (); 
    			//$req->closeCursor();
    			unset($bdd);
     
    			$NbrPage= ceil($NbrTot/10);// entier immédiatement supérieur ou égal
    			$reste = $NbrTot%10;// reste de la division, nombre de billet de la dernière page
    Vue le peu d'enregistrement actuel, je ne parviens pas à voire quelle est la fonction la plus rapide pour obtenir le nombre total d'enregistrement, pour l'instant j'utilise count(id) car j'ai cru comprendre que cela ne récupère que le nombre d'enregistrement et non pas l'ensemble des lignes comme avec rowCount().
    Ai je bon ?

    Merci de m'avoir lut.
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Tout bon !

    Pour connaitre le nombre de lignes, utilise une requête SELECT COUNT.

    Utiliser rowCount pour connaitre le nombre de lignes a deux inconvénients :
    • rowCount donne le nombre de lignes remontées par la requête SELECT, ce qui veut dire qu'il faut remonter les données. Et remonter des données que tu n'utilises pas est une mauvaise pratique qui coûte du temps et de la mémoire. C'est un peu comme vider une bibliothèque juste pour compter les livres. Il est tellement plus simple de compter les livres sur les étagères et de ne récupérer que ceux qui t'intéressent réellement.
    • A la base, rowCount n'est pas fait pour être utilisé avec des requêtes SELECT. La doc PHP précise un petit détail :
      Si la dernière requête SQL exécutée par l'objet PDOStatement associé est une requête de type SELECT, quelques bases de données retourneront le nombre de lignes retournées par cette requête. Néanmoins, ce comportement n'est pas garanti pour toutes les bases de données et ne devrait pas être exécuté pour des applications portables.
      Autrement dit, il n'est pas sûr que ça fonctionne
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Expert confirmé
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 124
    Par défaut
    Merci de cette réponse, c'est donc bien se que je pensai, exprimé d'une façon claire et documentée.

    Merci
    :whistle:pourquoi pas, pour remercier, un :plusser: pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

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

Discussions similaires

  1. [MySQL] Optimisation requête avec SELECT COUNT
    Par przvl dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/10/2008, 15h27
  2. [Java][debutant]select count(*) ne retourne rien !!
    Par Invité dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 24/01/2007, 11h39
  3. mon select count(*) marche pas
    Par zorba49 dans le forum Langage SQL
    Réponses: 14
    Dernier message: 05/08/2005, 08h28
  4. [Performance] RecordCount ou select Count(champ) ?
    Par shwin dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 28/09/2004, 17h37
  5. résultat de " select count "
    Par marie253 dans le forum Bases de données
    Réponses: 3
    Dernier message: 17/06/2004, 12h07

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