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 :

Problème de résultat avec jointure multiple


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2018
    Messages : 17
    Par défaut Problème de résultat avec jointure multiple
    Bonjour à tous.

    J'ai plusieurs tables :
    • prestataire : id_prestataire, nom
    • region : id_region, region
    • liaison_prestataire_region : id_prestataire, id_region
    • liaison_prestataire_competence : id_prestataire, id_competence, id_type_competence
    • type_projet_materiel : id_type_projet_materiel, type_projet_materiel
    • type_projet_software : id_type_projet_software, type_projet_software


    Dans liaison_prestataire_competence, si id_type_competence = 1, alors id_competence = id_type_projet_materiel, et si id_type_competence = 2, alors id_competence = id_type_projet_software.

    Je cherche, avec une seule requête, à récupérer les informations du prestataire, des régions et des compétences.

    Voici la requête que j'ai écrite :

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    SELECT p.id_prestataire, p.nom, 
    	GROUP_CONCAT(r.region SEPARATOR ', ') as regions, 
    	GROUP_CONCAT(r.id_region SEPARATOR ',') as idsRegions, 
    	GROUP_CONCAT(com.id_competence SEPARATOR ',') AS idsCompetence,
    	GROUP_CONCAT(com.id_type_competence SEPARATOR ',') AS idsTypeCompetence
     
    FROM liaison_prestataire_region lpr
    INNER JOIN region r ON r.id_region = lpr.id_region 
    INNER JOIN prestataire p ON p.id_prestataire = lpr.id_prestataire
     
    INNER JOIN liaison_prestataire_competence lpc ON lpc.id_prestataire = p.id_prestataire
     
    INNER JOIN(
    	SELECT id_type_projet_materiel AS id_competence, 1 AS id_type_competence, GROUP_CONCAT(type_projet_materiel SEPARATOR ',') AS competence
    	FROM type_projet_materiel tpm
    	GROUP BY id_competence, id_type_competence
    	UNION
    	SELECT id_type_projet_software AS id_competence, 2 AS id_type_competence, GROUP_CONCAT(type_projet_software SEPARATOR ',') AS competence
    	FROM type_projet_software tps
    	GROUP BY id_competence, id_type_competence
    ) AS com
    ON com.id_competence = lpc.id_competence
    AND com.id_type_competence = lpc.id_type_competence            
     
    GROUP BY p.id_prestataire, p.nom
    Mais le résultat n'est pas concluant, les informations concernant les régions et les compétences sont doublé voir quadruplé.

    Voici ce que j'obtiens :

    Nom : sql_faux.PNG
Affichages : 196
Taille : 7,4 Ko

    Et voici ce que j'aimerai obtenir:

    Nom : sql_juste.PNG
Affichages : 190
Taille : 6,4 Ko


    Que dois-je modifier dans ma requête afin d'avoir le résultat voulu ?

    Merci d'avance pour votre aide.

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Par défaut
    bonjour,

    a première vue, cela est dû au fait qu'un prestataire peut avoir plusieurs régions et plusieurs compétence.

    Pour un prestataire ayant deux région, et six compétence, vous obtiendrez donc 6 lignes (les trois compétence pour la région 1, et les trois compétences pour la région 2)

    Vous pourriez descendre vos GROUP_CONCAT dans des sous requête dans la clause FROM afin de n'avoir qu'une ligne de la table région par prestataire, idem pour la table des compétences.

Discussions similaires

  1. Problème requête avec jointures multiples
    Par babouu dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/12/2011, 17h16
  2. Problème avec jointures multiples.
    Par Veritas5 dans le forum Développement
    Réponses: 3
    Dernier message: 05/06/2009, 15h42
  3. [SQL] Problème de résultat avec une requête
    Par raptorman dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/01/2006, 17h16
  4. Problème performance SELECT avec jointure
    Par Netgamer dans le forum Requêtes
    Réponses: 7
    Dernier message: 05/08/2005, 10h20
  5. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33

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