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

 MySQL Discussion :

Compter les ligne d'une clef etrangere


Sujet :

MySQL

  1. #1
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut Compter les ligne d'une clef etrangere
    Bonjour !

    J'ai actuellement une table guide , une table guide_partie dont voici les champs :

    guide :
    id
    titre

    guide partie :
    id
    id_guide
    titre

    J'aimerais pouvoir récuperer en une requete le titre de guide ( jusque là j'y arrive ) et avec le nombre de guide_partie dont id_guide = id

    J'ai pour le moment ceci ( avec un test sur mon 4eme guide ^^ ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT g.titre
    FROM guide g
    LEFT JOIN guide_partie gp ON gp.id_guide = g.id
    WHERE g.id =4
    Merci d'avance !

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT g.titre, COUNT(*) AS Nb_Parties
    FROM guide g
      LEFT JOIN guide_partie gp ON gp.id_guide = g.id
    WHERE g.id =4 -- facultatif
    GROUP BY g.titre
    Si tous tes guides ont aux moins une partie, tu peux remplacer LEFT JOIN par INNER JOIN.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre confirmé Avatar de IP-Fix
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    421
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 421
    Points : 494
    Points
    494
    Par défaut
    Merci ! J'aurais du penser au Count ( * ) AS , grumbl

    En tout cas c'est parfait !

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Citation Envoyé par Antoun Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT g.titre, COUNT(*) AS Nb_Parties
    FROM guide g
      LEFT JOIN guide_partie gp ON gp.id_guide = g.id
    WHERE g.id =4 -- facultatif
    GROUP BY g.titre
    Si tous tes guides ont aux moins une partie, tu peux remplacer LEFT JOIN par INNER JOIN.
    Euh, j'ai pas vraiment testé, mais je pense que si un guide n'a pas une partie correspondante (cas qui apparaît avec le LEFT JOIN uniquement), le COUNT(*) va quand même renvoyer 1 au lieu de 0.
    Il faut donc, dans ce cas particulier, complexifier un peu la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT g.titre, SUM(CASE WHEN gp.id_guide IS NULL THEN 0 ELSE 1 END) AS Nb_Parties
    FROM guide g
      LEFT JOIN guide_partie gp ON gp.id_guide = g.id
    WHERE g.id =4 -- facultatif
    GROUP BY g.titre
    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Citation Envoyé par ced Voir le message
    Euh, j'ai pas vraiment testé, mais je pense que si un guide n'a pas une partie correspondante (cas qui apparaît avec le LEFT JOIN uniquement), le COUNT(*) va quand même renvoyer 1 au lieu de 0.
    Tu as entièrement raison.

    Citation Envoyé par ced Voir le message
    Il faut donc, dans ce cas particulier, complexifier un peu la requête :
    Il y a plus simple, il suffit de compter sur une colonne NOT NULL de la table facultative (par ex. la clé primaire) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT g.titre, COUNT(gp.id) AS Nb_Parties
    FROM guide g
      LEFT JOIN guide_partie gp ON gp.id_guide = g.id
    WHERE g.id =4 -- facultatif
    GROUP BY g.titre
    En effet, le COUNT, comme les autres fonctions d'agrégation, ignore les NULL, et ne prendra donc en compte que les lignes avec correspondance entre les deux tables.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

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

Discussions similaires

  1. [XL-2003] Compter les lignes d'une requête SQL
    Par exqo77 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/07/2009, 14h25
  2. Réponses: 2
    Dernier message: 25/04/2009, 20h46
  3. [BO XI R2] Compter les lignes d'une requête
    Par iori11 dans le forum Webi
    Réponses: 6
    Dernier message: 24/06/2008, 12h10
  4. Comment compter les lignes d'une relation d'un DataSet
    Par Poussy-Puce dans le forum ASP.NET
    Réponses: 1
    Dernier message: 01/10/2007, 14h08
  5. Compter les lignes d une <TABLE>
    Par Invité(e) dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 21/01/2005, 14h43

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