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 :

Effectuer plusieurs COUNT dans une requete mysql


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut Effectuer plusieurs COUNT dans une requete mysql
    Bonjour à tous,

    Je cherche à mettre en place un calcul du nombre de réponse par catégorie via une seule requête mysql.

    Dans ma page agenda j'affiche plusieurs événements correspondant à trois catégories.
    Je souhaite compter le nombre de réponse pour les 3 catégories via une seule requête mysql.

    J'ai fait le tour des plusieurs réponses sur le forum mais je n'ai pas trouvé de quoi avancer sur mon problème.

    Voici le bout de requête que j'ai gratté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $sqlQuery2 =
    		" SELECT COUNT (SOIREE_TYPE= '1') AS CONCERT_TYPE, COUNT (SOIREE_TYPE= '2') AS SPECTACLE_TYPE, COUNT (SOIREE_TYPE= '3') AS SOIREE_TYPE ".
    			" FROM SOIREE ".
     " ORDER BY SOIREE_DATE ASC ";
     
    				$req2 = mysql_query($sqlQuery2);
    				checkSqlError($sqlQuery2);
    				$countValue = mysql_fetch_array($req2);
    				return $countValue['CONCERT_TYPE'];
    				return $countValue['SPECTACLE_TYPE'];
    				return $countValue['SOIREE_TYPE'];
    J'ai un message d'erreur qui s'affiche : à causé une erreur sur le serveur mySql:
    FUNCTION nightfever1.COUNT does not exist
    A priori je m'y prends mal, quelle est la bonne méthode ?

    Merci beaucoup par avance,

    Aurélien

  2. #2
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    Bonjour,

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT COUNT(*) AS nombre_reponses FROM SOIREE
    GROUP BY SOIREE_TYPE
    WHERE SOIREE_TYPE IN(1, 2, 3)
    ORDER BY SOIREE_DATE

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Je remets juste les instructions dans le bonne ordre
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT SOIREE_TYPE, COUNT(*) AS nombre_reponses 
    FROM SOIREE
    WHERE SOIREE_TYPE IN (1, 2, 3)
    GROUP BY SOIREE_TYPE
    ORDER BY SOIREE_TYPE
    Mais cette requête fourni les count en ligne.
    Les avoir en colonne relève de la cosmétique et n'est pas le travail du SGBD mais celui du code applicatif (ici le php).

    Il est possible d'effectuer des opérations de cosmétique côté SGBD mais
    1/ la requête est moins performante
    2/ c'est statique (ici 3 colonnes max et soiree_type est hardcodé)

    Tu sembles avoir la main sur le code php donc autant pivoter les résultat en php.
    Si tu as vraiment besoin de ce formatage en colonne nous te le fournirons mais il n'est pas souhaitable d'utiliser le php pour générer une requête cosmétique, autant l'utiliser pour directement faire le cosmétique!

    Allez un indice si tu es intéressé, utilise les mots clé PIVOT, MAX, CASE pour te renseigner.

    PS : tu parles d'agenda et tu utilises
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY SOIREE_DATE
    donc peut être que la requête fourni ne correspond pas à ton besoin. Si c'est le cas merci d'être plus explicite.

  4. #4
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut
    Merci beaucoup pour vos réponses.

    Désolé mais certains termes sont du chinois pour moi
    Une fois la requête mise en place, comment afficher le nombre de mes résultats par catégorie en php ?

    Merci par avance,

    Aurélien

  5. #5
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    @skuatamad : merci pour cette correction

    @AurelienNF : tu vas récupérer un resultSet du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1 500
    2 250
    3 400
    où 1, 2, 3 sont les catégories et 500, 250, 400 sont le nombre de résultats par catégories.

    Ainsi, si tu codes avec pdo, tu peux faire quelque chose comme ca :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $statement = $this->_connexion->prepare('SELECT soiree_type, COUNT(*) AS nombre_reponses 
                                                              FROM SOIREE
                                                              WHERE SOIREE_TYPE IN (1, 2, 3)
                                                              GROUP BY SOIREE_TYPE
                                                              ORDER BY SOIREE_TYPE');
    $statement->execute();
     
    while($ligne = $statement->fetchObject())
        echo 'catégorie ' . $ligne->soiree_type . ' : ' . $ligne->nombre_reponses . '<br />';

    Reste plus bien sur qu'à formater les données à ton gré

    EDIT: le $this->_connexion représente ta connexion à ta base si bien sur tu codes en POO

  6. #6
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut
    Merci pour vos réponses.

    Je ne connaissais même pas l'existance de pdo
    Est-ce vraiment plus utile que mes requetes classiques ? Moins contraignant ?

    Actuellement n'utilisant pas pdo, comment puis-je integrer cette requete mysql à mon code php ?

    Merci par avance,

    Aurélien

  7. #7
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par AurelienNF Voir le message
    Je ne connaissais même pas l'existance de pdo
    Est-ce vraiment plus utile que mes requetes classiques ? Moins contraignant ?
    Saluton,
    Il est de plus en plus question que, dans les versions futures de PHP, PDO devienne la seule interface vers les SGBD.

  8. #8
    Membre émérite Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Points : 2 566
    Points
    2 566
    Par défaut
    De la lecture ici

    PDO n'est pas simple pour un débutant, mais quitte à partir de zéro ou presque, autant étudier cette interface

  9. #9
    Membre régulier
    Homme Profil pro
    Consultant E-Business
    Inscrit en
    Août 2010
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Août 2010
    Messages : 216
    Points : 96
    Points
    96
    Par défaut
    Merci pour les infos et pour la lecture

    Néanmoins, n'ayant pas trop le temps en ce moment, je souhaiterais quand même pouvoir utiliser ce comptage de catégorie dans un langage plus traditionnel. Des que j'aurai le temps je m'occuperai du cas pdo.

    De quelle manière m'y prendre pour afficher les résultats de cette requête dans un langage php/mysql traditionnel ?

    Merci beaucoup par avance.

    Aurélien

Discussions similaires

  1. Plusieurs count dans une requete !
    Par cmoi70 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 25/02/2010, 17h15
  2. Pb Count dans une requete avec plusieurs champ retournés
    Par maxos75 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 13/06/2008, 14h01
  3. Réponses: 1
    Dernier message: 28/03/2007, 12h23
  4. faire plusieurs having dans une requete mysql
    Par sirbaldur dans le forum Requêtes
    Réponses: 1
    Dernier message: 15/11/2006, 10h22
  5. PLusieurs COUNT dans une requete?
    Par haludo dans le forum Access
    Réponses: 3
    Dernier message: 04/10/2006, 10h38

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