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 :

[MySQL-5.5] Concaténer les résultats dans une jointure avec trois tables


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 29
    Points
    29
    Par défaut [MySQL-5.5] Concaténer les résultats dans une jointure avec trois tables
    Bonjour,
    je souhaite faire une jointure entre trois tables où les champs d'une des tables sont concaténés.
    J'ai créé ces trois tables pour la gestion de tags. Voici à quoi elles ressemblent.

    Première table 'AUTEURS'

    Id ------ Noms
    1 ------- Jean
    2 ------- Marie
    3 ------- David
    4 ------- Roger
    5 ------- Pierre


    Deuxième table 'TAGS'
    Id ------ Tag
    1 ------ Science-Fiction
    2 ------ Histoire
    3 ------ Nouvelles
    4 ------ Amour
    5 ------ Policier
    6 ------ Espionnage
    7 ------ Horreur

    Deuxième table 'LIENS'
    Id ------ IdAuteurs ----- IdTags
    1 ----------- 1 ------------- 4
    2 ----------- 1 ------------- 5
    3 ----------- 1 ------------- 7
    4 ----------- 2 ------------- 1
    5 ----------- 2 ------------- 6
    6 ----------- 3 ------------- 3
    7 ----------- 4 ------------- 3
    8 ----------- 4 ------------- 6

    En faisant cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT * FROM auteurs AS au
    INNER JOIN liens AS li ON li.IdAuteurs = au.Id
    INNER JOIN tags AS ta ON ta.Id = li.IdTags
    j'obtiens :
    Jean ------ Amour
    Jean ------ Policier
    Jean ------ Horreur
    Marie ------ Science-Fiction
    Marie ------ Espionnage
    David ------ Nouvelles
    Roger ------ Nouvelles
    Roger ------ Espionnage

    La requête me sort tous les noms et tous les tags et associe un nom avec un tag


    En faisant cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * FROM auteurs AS au
    INNER JOIN liens AS li ON li.IdAuteurs = au.Id
    INNER JOIN tags AS ta ON ta.Id = li.IdTags
    GROUP BY au.Id
    j'obtiens :
    Jean ------ Horreur
    Marie ------ Espionnage
    David ------ Nouvelles
    Roger ------ Espionnage

    Là je n'ai qu'un seul nom mais qu'un seul tag aussi. Et moi j'aimerais obtenir en sortie :

    Jean ------ Amour,Policier,Horreur
    Marie ------ Science-Fiction,Espionnage
    David ------ Nouvelles
    Roger ------ Nouvelles,Espionnage

    J'aimerais donc concaténer les tags pour les associer au nom correspondant. Existe t-il une méthode avec mysql ?

    Maxime

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    regardez du côté du group_concat

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 25
    Points : 29
    Points
    29
    Par défaut
    C'est bon j'ai réussi ! Ton message, punkoff, m'a orienté dans la bonne direction. Je laisse ma requête pour les prochains qui chercheraient la même chose que moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT DISTINCT au.* GROUP_CONCAT(DISTINCT ta.Tag ORDER BY Tag) AS IdTagsListe
    FROM liens AS li
    LEFT JOIN tags AS ta ON li.IdTags = ta.Id
    LEFT JOIN auteurs AS au ON au.Id = li.IdAuteurs
    GROUP BY au.Id
    ORDER BY au.Id
    Merci punkoff !

    Maxime

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

Discussions similaires

  1. Optimiser les résultats d'une recherche avec MySQL
    Par E_HUGO dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/02/2010, 01h17
  2. Réponses: 19
    Dernier message: 03/02/2009, 11h52
  3. Concaténer les résultats d'une boucle
    Par fifou92 dans le forum Langage
    Réponses: 2
    Dernier message: 04/07/2008, 11h13
  4. Concaténer les valeurs dans une boucle
    Par philippef dans le forum Langage
    Réponses: 4
    Dernier message: 28/08/2007, 21h08
  5. Réponses: 2
    Dernier message: 11/06/2007, 17h40

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