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 :

Jointures avec table d'association


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Points : 11
    Points
    11
    Par défaut Jointures avec table d'association
    Bonjour,

    voilà, j'ai un soucis, j'ai une table utilisateurs (users), une table avec des groupes d'utilisateurs (user_groups) et une table qui fait les correspondances (user_group_map)

    Par exemple si un utilisateur est dans 2 groupes, il y a 2 entrées sur lui dans 'user_group_map'

    J'aimerai faire une jointure (si faisable) qui quand j'appel une liste d'utilisateur, me donne tous les group id correspondants.

    Pour avoir une structure un peu comme celle-ci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    [{
    "user_id": "561",
    "name": "John Doe",
    "username": "doe",
    "email": "xxx@xxx",
    "password": "xxxx",
    "groups": [1,5,6]
    },...]
    J'ai environ 3000 utilisateurs, si je fais une boucle pour tout associer en appelant séparément les 2 tables j'ai bien peur que le serveur ne suive pas.

    Est-ce faisable ?

  2. #2
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    Hello !

    Je crois que ce que tu cherche c'est la fonction GROUP_CONCAT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT user_id, GROUP_CONCAT(group_id) groups
    FROM user INNER JOIN user_group_map on user.user_id = user_group_map.user_id
    GROUP BY user_id

  3. #3
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    Allé, je vais pousser un peu plus loin

    ta requête devrait ressembler à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT
        user_id,
        name,
        username,
        email,
        password,
        (
            SELECT GROUP_CONCAT(group_id)
            FROM user2 INNER JOIN user_group_map on user.user_id = user_group_map.user_id
            WHERE u1.user_id = u2.user_id
        ) groups
    FROM user u1

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Tout d'abord un grand merci pour ton aide.

    Ce que tu m'as envoyé à l'air de presque fonctionné. Je me retrouve avec ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    {
    "id": "561",
    "name": "John Doe",
    "username": "doe",
    "email": "xxx",
    "password": "xxx",
    "groups": "8,8,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,"
    },
    Tu peux voir que j'ai pleins de fois les mêmes chiffres alors que pour cet utilisateur, par exemple, il n'a que 2 groupes et il n'y a que 2 entrées qui le concerne dans la table associative.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 130
    Points : 38 543
    Points
    38 543
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Ajoutez le mot clef "distinct"

  6. #6
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    La table user_groups_map, n'aurait-elle pas de doublons sur le couple user_id/group_id ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Points : 11
    Points
    11
    Par défaut
    Non, j'ai bien par exemple pour ce user uniquement 2 entrées.

  8. #8
    Membre confirmé Avatar de Sebwar
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2012
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 172
    Points : 498
    Points
    498
    Par défaut
    ou put être que tu as oublié le "WHERE u1.user_id = u2.user_id" ?

    Le mieux serait de nous mettre ta requêtes

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2016
    Messages : 7
    Points : 11
    Points
    11
    Par défaut
    Rebonjour à tous,

    merci pour votre aide.

    Au final, j'ai réussi avec votre aide. Il ne me fallait qu'un groupe au final donc j'ai adapté en retirant le CONCAT et en définissant "LIMIT 1" dans la sous-requête.

    J'aurai une autre question pour un autre cas de figure mais qui s'en rapproche. Je peux la poser ici ou bien je dois faire un nouveau topic ?

Discussions similaires

  1. Jointure avec table associative
    Par flavors dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 03/08/2015, 16h32
  2. jointure avec table T030
    Par kercommun dans le forum SAP
    Réponses: 5
    Dernier message: 24/01/2011, 16h50
  3. Jointure avec tables contenant des memes noms de champs
    Par guy2004 dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/01/2010, 10h25
  4. Edmx : Chargement multiple avec table d'association
    Par cfeltz dans le forum Accès aux données
    Réponses: 1
    Dernier message: 30/07/2009, 14h22
  5. [HIBERNATE] requete avec table d'association
    Par zybay dans le forum Hibernate
    Réponses: 1
    Dernier message: 14/06/2007, 12h59

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