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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    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 Expert 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
    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 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    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 confirmé
    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
    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 Expert 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
    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 confirmé
    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
    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

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