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 :

COUNT avec jointures


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
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Par défaut COUNT avec jointures
    Bonjour,

    je butte sur quelquechose qui m'a pourtant l'air pas trop compliqué.

    J'ai une table "job". J'aimerais selectionner tous les jobs appartenant à X personne, compter le nb de candidatures total, ainsi que le nb de candidatures non lu (representé par read = 0)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT job.id ,
        COUNT(candidatures.id) AS nb_candidatures 
        COUNT(unread.id) AS nb_unread
    FROM job  
    LEFT JOIN candidatures 
    ON candidatures.id_job = job.id 
    LEFT JOIN candidatures AS unread 
    ON unread.id_job = job.id 
    WHERE posted_by = $mon_id
    AND unread.read = 0 
    GROUP BY job.id
    Cette requête ne fonctionne bien sur pas. J'ai essayé avec un LEFT OUTER JOIN, mais j'avoue que je commence un peu à m'emmêler les pinceaux.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par supertino7 Voir le message
    tous les jobs appartenant à X personne,
    Cette clause est censée figurer où dans la requête ?
    Dans cette partie ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE posted_by = $mon_id
    compter le nb de candidatures total, ainsi que le nb de candidatures non lu (representé par read = 0)
    Pas besoin de la seconde jointure. un SUM(CASE...) devrait fonctionner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT j.id,
        COUNT(c.id) AS nb_candidatures,
        SUM(CASE c.read 
          WHEN 0 THEN 1 
          ELSE 0 
        END) AS nb_unread
    FROM job AS j
    LEFT JOIN candidatures AS c ON c.id_job = j.id
    WHERE j.posted_by = $mon_id
    GROUP BY j.id
    J'ai essayé avec un LEFT OUTER JOIN, mais j'avoue que je commence un peu à m'emmêler les pinceaux.
    LEFT JOIN et LEFT OUTER JOIN, c'est pareil ! OUTER est facultatif.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 124
    Par défaut
    Merci pour ton aide Cinephil, encore une fois, impressionnant.

    Je m'en vais me renseigner sur la fonction SUM() que je n'utilise jamais.

    Si je peux me permettre, comment rajouter correctement une clause WHERE c.deleted = 0, à tous les décomptes de candidatures ?

Discussions similaires

  1. performance d'un count avec jointures.
    Par bidi dans le forum SQL
    Réponses: 47
    Dernier message: 15/04/2009, 09h30
  2. double count avec jointure
    Par olibara dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/08/2008, 00h25
  3. Select count avec jointure, en récupérant les 0 : possible ?
    Par littlewings dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2008, 13h57
  4. select count avec jointure, en récupérant les 0
    Par littlewings dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/07/2008, 12h58
  5. Réponses: 3
    Dernier message: 09/11/2006, 00h04

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