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 :

Requête avec 4 left JOIN, Problème de doublons


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Requête avec 4 left JOIN, Problème de doublons
    Bonjour.
    C'est la première fois que je post sur votre forum, je vais essayer de mettre mon message le plus en forme possible.

    J'ai un souci que je n'arrive pas à résoudre et j'ai beau chercher, je ne comprends pas bien ce qui ce passe. Je vais essayer d'être le plus clair possible.

    Pour un site, j'ai besoin d'avoir des études qui peuvent être relié à un ou plusieurs utilisateurs ET/OU à un ou plusieurs comptes client

    J'ai une base de donnée avec 5 tables :

    Etude avec les champs utilisés : Id_etude
    Rel_etude_compte_client avec les champs utilisés : Id_Etude et Id_Compte_client
    Compte_client avec les champs utilisés : Id_compte_client
    Rel_etude_compte_utilisateur avec les champs utilisés : Id_Etude et Id_Compte_utilisateur
    Compte_utilisateur avec les champs utilisés : Id_utilisateur

    Je cherche à afficher les études de ma base de donnée mais pas seulement. J'aimerais récupérer dans ma requête les Compte_client et les Compte_utilisateur qui sont reliés à mes études.
    De plus je n'aimerais pas tout récupérer, seulement certains champs et concaténer les résultats des clients et utilisateurs qui sont reliés à mes études.

    Je fais donc la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT Etude.Id_etude,Etude.Titre_etude, GROUP_CONCAT(Nom_client_cc SEPARATOR '|') AS Nom_compte_client,GROUP_CONCAT(Nom_utilisateur SEPARATOR '|') AS Nom_compte_utilisateur 
    FROM Etude
    LEFT JOIN Rel_etude_compte_client ON Rel_etude_compte_client.Id_Etude = Etude.Id_etude 
    LEFT JOIN Compte_client ON Compte_client.Id_compte_client = Rel_etude_compte_client.Id_Compte_client 
    LEFT JOIN  Rel_etude_compte_utilisateur ON  Rel_etude_compte_utilisateur.Id_Etude = Etude.Id_etude 
    LEFT JOIN Compte_utilisateur ON Compte_utilisateur.Id_utilisateur =  Rel_etude_compte_utilisateur.Id_Compte_utilisateur 
    GROUP BY Etude.Id_etude
    Je fais donc mon select avec mes champs sélectionnés et mes concaténation sur ma table Etude puis je joins mes tables en fonction de mes relations.

    L'affichage est correct sauf que j'ai des doublons...
    Voila l'affichage de ma requête :



    OR j'ai dans ma base de donnée
    - l'étude Id_etude 3 relié à deux comptes clients (ADIDAS ET NIKE) ET trois utilisateurs (jack sparrow, picahul et gonzalez)
    - l'étude Id_etude 4 relié à un compte client (ADIDAS) et trois compte utilisateurs (gonzalez, picahul et gonzalez, en effet test avec deux utilisateurs du même nom...)

    Ce qui est étrange c'est que mon résultat est bon quand j'ai simplement mes deux jointures de tables comme cette requête :
    SELECT Etude.Id_etude,Etude.Titre_etude, GROUP_CONCAT(Nom_client_cc SEPARATOR '|') AS Nom_compte_client FROM Etude
    LEFT JOIN Rel_etude_compte_client ON Rel_etude_compte_client.Id_Etude = Etude.Id_etude
    LEFT JOIN Compte_client ON Compte_client.Id_compte_client = Rel_etude_compte_client.Id_Compte_client
    GROUP BY Etude.Id_etude
    J'ai bien le résultat comme l'image ci-dessous :

    - J'ai bien ici par exemple l'étude avec Id_etude 3 qui est relié aux deux comptes clients ADIDAS et NIKE

    Donc il se passe une multiplication de ligne de résultat que je ne maîtrise pas lorsque j'ajoute mes deux autres jointures de table..

    Auriez vous une solution, proposition pour que mon résultat s'affiche sans doublons ?

    Merci de votre aide, j'en ai grand besoin !
    Bonne fin de journée !

    PM.VIAL

  2. #2
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 386
    Points : 3 531
    Points
    3 531
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Je sais que ce n'est pas le paradis, mais avec DISTINCT :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP_CONCAT(DISTINCT  Nom_client_cc SEPARATOR '|')
    Peut être que ça résoudra le problème...
    Consultant et développeur full-stack spécialiste du Web
    faq jQuery - règles du forum - faqs web

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Hum, j'y ai pensé, testé et ça marche en effet.

    Mais c'est pas l'idéal puisque il peux y avoir plusieurs compte_client qui ont le même Nom_client_cc...

    D'ailleurs, j'ai essayer d'ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP_CONCAT(DISTINCT  Id_compte_client SEPARATOR '|')
    pour pallier le problème, mais il me renvoi une colonne "BLOB"..

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Citation Envoyé par pm.vial Voir le message
    Donc il se passe une multiplication de ligne de résultat que je ne maîtrise pas lorsque j'ajoute mes deux autres jointures de table..

    Ta première requête te donne :
    blahblah Adidas
    blahblah Nike
    Forcement si tu ajoutes une jointures ça multiplie :
    blahblah Adidas jack sparrow
    blahblah Adidas picahul
    blahblah Adidas gonzalez
    blahblah Nike jack sparrow
    blahblah Nike picahul
    blahblah Nike gonzalez

    Peut être qu'en le faisant en deux fois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT tmp.Id_etude,tmp.Titre_etude, tmp.Nom_compte_client, GROUP_CONCAT(Nom_utilisateur SEPARATOR '|') AS Nom_compte_utilisateur 
    FROM (
      SELECT Etude.Id_etude,Etude.Titre_etude, GROUP_CONCAT(Nom_client_cc SEPARATOR '|') AS Nom_compte_client
      FROM Etude
      LEFT JOIN Rel_etude_compte_client ON Rel_etude_compte_client.Id_Etude = Etude.Id_etude 
      LEFT JOIN Compte_client ON Compte_client.Id_compte_client = Rel_etude_compte_client.Id_Compte_client 
      GROUP BY Etude.Id_etude,Etude.Titre_etude
    ) tmp
    LEFT JOIN  Rel_etude_compte_utilisateur ON  Rel_etude_compte_utilisateur.Id_Etude = tmp.Id_etude 
    LEFT JOIN Compte_utilisateur ON Compte_utilisateur.Id_utilisateur =  Rel_etude_compte_utilisateur.Id_Compte_utilisateur 
    GROUP BY tmp.Id_etude,tmp.Titre_etude

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut thx !
    Un grand merci à vous messieurs !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/06/2013, 17h30
  2. Requêtes avec plusieurs left Join créés dynamiquement
    Par bigbang84 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 24/10/2012, 17h06
  3. Problème avec un LEFT JOIN/ RIGHT JOIN
    Par Moutonstar dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 25/11/2008, 14h03
  4. Lenteur requête avec 17 LEFT JOIN. Comment l'optimiser?
    Par spitou_77 dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/10/2007, 16h44

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