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

Langage SQL Discussion :

count() dans *plusieurs* LEFT JOIN


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Points : 12
    Points
    12
    Par défaut count() dans *plusieurs* LEFT JOIN
    Bonjour,

    Je me heurte actuellement à un petit problème concernant des LEFT JOIN.

    Voici la structure de mes tables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    CREATE TABLE cg_images (id int(7), g_id int(7));
    CREATE TABLE cg_fiches (id int(7), titre varchar(255));
    CREATE TABLE cg_articles (id int(7), g_id int(7));
     
    INSERT INTO cg_fiches VALUES(1, "Première fiche");
    INSERT INTO cg_fiches VALUES(2, "Deuxième fiche");
     
    INSERT INTO cg_images VALUES (1, 2);
    INSERT INTO cg_images VALUES (2, 2);
    INSERT INTO cg_images VALUES (3, 1);
     
    INSERT INTO cg_articles VALUES (1, 1);
    INSERT INTO cg_articles VALUES (2, 1);
    INSERT INTO cg_articles VALUES (3, 2);
    Les champs g_id font références à un ID qui est dans la table cg_fiches.
    Je cherche à faire une requête SELECT qui me liste toutes les fiches présente en indiquant combien d'articles existent faisant référence à chaque fiche (ça marche) ET en même temps combien d'images existent faisant référence à cette fiche. Autrement dit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT cg_fiches. * , count( cg_articles.id ) 
    FROM cg_fiches
    LEFT JOIN cg_articles ON cg_articles.g_id = cg_fiches.id
    GROUP BY cg_articles.g_id
    LIMIT 0 , 30
    Ceci marche mais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT cg_fiches. * , count( cg_images.id ) , count( cg_articles.id ) 
    FROM cg_fiches
    LEFT JOIN cg_images ON cg_images.g_id = cg_fiches.id
    LEFT JOIN cg_articles ON cg_articles.g_id = cg_fiches.id
    GROUP BY cg_images.g_id, cg_articles.g_id
    LIMIT 0 , 30
    ne marche pas !

    J'ai l'impression que j'ai une erreur de conception dans ma requête (lol). Pour info je suis sur MySQL 4.0.x (j'ai pas posté dans le forum MySQL parce que je pense que c'est plutôt une erreur de conception plus qu'une erreur spécifique au SGBD que j'utilise).

    Si quelqu'un peut éclairer ma lanterne...

    Merci !

    @+ Jonathan

  2. #2
    Membre actif
    Inscrit en
    Février 2003
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 182
    Points : 206
    Points
    206
    Par défaut
    bonjour,

    cela m'étonne que ta première requête fonctionne car dans le group by doivent être présent tous les champs de ton select. ceci n'est pas le cas.

    la solution est :

    [SELECT cg_fiches. * ,count(distinct cg_images.id) ,
    count(distinct cg_articles.id)
    FROM cg_fiches
    LEFT JOIN cg_images ON cg_images.g_id = cg_fiches.id
    LEFT JOIN cg_articles ON cg_articles.g_id = cg_fiches.id
    GROUP BY cg_fiches.id, titre
    ][/code]

    A+

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Génial. Un simple distinct a résolu le problème. Merci beaucoup.

    @+ Jonathan

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

Discussions similaires

  1. Requete SQL - count dans un left join
    Par JbWillGetYou dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/06/2010, 01h07
  2. Count dans plusieurs colonne d'une même table
    Par macfleid dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/07/2008, 20h43
  3. Count dans plusieurs tables
    Par kevinf dans le forum Requêtes
    Réponses: 11
    Dernier message: 26/11/2006, 11h03
  4. Grosse requête dans plusieurs tables. (JOIN)
    Par Space Cowboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 12/10/2006, 10h18
  5. Combiner plusieurs LEFT JOIN dans une requète
    Par feanor12 dans le forum Access
    Réponses: 3
    Dernier message: 24/08/2006, 13h39

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