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 :

multiple count avec condition


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut multiple count avec condition
    Bonjour,


    J'ai des objets formation, salle et professeur.
    Une formation a 0 ou plusieurs salles.
    Une formation a 0 ou plusieurs professeurs.

    Table formation (id,nom,lieu)
    Table formation_salle(id, id_formation, id_salle, actif)
    Table formation_professeur(id, id_formation, id_professeur, actif)


    Je veux récupérer la liste des formations qui appartiennent à un lieu donné
    avec le nombre de salles rattachées actifs ainsi que le nombre de professeurs rattachés actifs.

    J'ai du mal à faire ceci en 1 seule requête. J'ai tenté ceci mais je ne sais pas où mettre les conditions sur le champ actif (qui doit etre égale à 1) des 2 tables d'association.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT formation.id, formation.lieu , COUNT ( f_s.id_formation),  COUNT ( f_p.id_formation)
    FROM formation
    LEFT JOIN formation_salle f_s
    LEFT JOIN formation_professeur f_p
    WHERE formation.lieu ='X'
    GROUP BY formation.id

    Merci beaucoup.

  2. #2
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Je te propose ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT F.id, F.nom, COUNT (DISTINCT FS.id) AS nbSalle, COUNT(DISTINCT FP.id) AS nbProf
    FROM formation F
    INNER JOIN formation_salle FS ON FS.formation_id = F.id AND FS.actif = 1
    INNER JOIN formation_professeur FP ON FP.formation_id = F.id AND FP.actif = 1
    WHERE lieu = 'lieu'
    GROUP F.id

    Dans des LEFT JOIN ou INNER JOIN il te faut des conditions!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Par défaut
    Très bien Merci.
    Il faut juste laisser LEFT JOIN au lieu des INNER JOIN
    car une formation peut avoir 0 salle ou 0 professeur et dans ce cas je veux les récupérer.

  4. #4
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Citation Envoyé par David55 Voir le message
    Je te propose ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT F.id, F.nom, COUNT (DISTINCT FS.id) AS nbSalle, COUNT(DISTINCT FP.id) AS nbProf
    FROM formation F
    INNER JOIN formation_salle FS ON FS.formation_id = F.id AND FS.actif = 1
    INNER JOIN formation_professeur FP ON FP.formation_id = F.id AND FP.actif = 1
    WHERE lieu = 'lieu'
    GROUP F.id
    Le problème avec cette requête, c'est que si une formation est associée à une salle, mais qu'aucun formateur n'ait été affecté encore (ce qui est possible vu sa relation 0-n), vous perdrez l'information.

  5. #5
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Vous avez été plus prompt que moi à poster !

  6. #6
    Rédacteur
    Avatar de David55
    Homme Profil pro
    Ingénieur informatique
    Inscrit en
    Août 2010
    Messages
    1 542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2010
    Messages : 1 542
    Par défaut
    Effectivement, erreur de ma part, il faut mettre des LEFT JOIN et non des INNER JOIN!

    Ce qui donne en fin de compte la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT F.id, F.nom, COUNT (DISTINCT FS.id) AS nbSalle, COUNT(DISTINCT FP.id) AS nbProf
    FROM formation F
    LEFT JOIN formation_salle FS ON FS.formation_id = F.id AND FS.actif = 1
    LEFT JOIN formation_professeur FP ON FP.formation_id = F.id AND FP.actif = 1
    WHERE lieu = 'lieu'
    GROUP F.id

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

Discussions similaires

  1. effectuer un count avec conditions
    Par tibss dans le forum Langage SQL
    Réponses: 6
    Dernier message: 28/04/2010, 18h11
  2. Count avec condition
    Par sherpa421 dans le forum iReport
    Réponses: 1
    Dernier message: 20/11/2009, 11h54
  3. Count avec condition
    Par ElBarto38 dans le forum SQL
    Réponses: 5
    Dernier message: 05/11/2009, 15h56
  4. Réponses: 1
    Dernier message: 22/12/2008, 10h15
  5. Count avec condition
    Par sourivore dans le forum Langage SQL
    Réponses: 24
    Dernier message: 22/08/2005, 22h41

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