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 classique entre table user et table group avec table pivot


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Profil pro
    manager
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : manager

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut requête classique entre table user et table group avec table pivot
    Bonjour,
    voici la situation :

    une table pour les membres, une table pour les groupes et une table pour les liaisons membres-groupes.
    la table de liaisons comprend 4 colones :
    id de la liaison
    id du groupe (group_id)
    id du membre (user_id)
    id du niveau de liaison (level_id)(1=membre, 2=secrétaire, etc, défini dans un autre table)

    question 1 :
    quelle syntaxe faut-t-il pour récupérer tous les groupes auxquels un membre (dont on connait le user_id=426) appartient
    et à l'inverse, tous les membres d'un groupe (dont on connait le group_id=18).

    question 2 ... plus difficile :-)
    quelle syntaxe faut-il pour récupérer tous les groupes auxquels un membre (pe : user_id=426) appartient en tant que secrétaire (level_id=2)

    question 3
    comme cette situation me parraît plus que courante, et que j'ai beaucoup de mal à trouver une réponse sur le web, existe-t-il une méthode de structuration des tables plus efficace-courante-rapide que celle présentée ici ?

    merci :-)

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    1.a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT goup_id FROM membres-groupes WHERE user_id=426
    1.b
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT user_id FROM membres-groupes WHERE group_id=18
    2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT group_id FROM membres-groupes WHERE user_id=426 AND level_id=2
    3. Je ne comprends pas la question

  3. #3
    Candidat au Club
    Profil pro
    manager
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : manager

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    donc, si je comprends bien,
    pour obtenir le détail (le nom p.e.) des groupes auxquels un membre est affilié,
    je dois le faire en deux étapes ...
    étape 1 : chercher les id des groupes
    étape 2 chercher les détails de ces groupes "WHERE id IN (résultat-de-la-requête-précédente)"

    ma question serait plutôt de savoir si il existe une requête qui fasse les deux
    du genre :
    SELECT * FROM group-table WHERE group_id IN (SELECT group_id FROM membre-group-table WHERE user_id = 426 [AND level_id = 2])
    je me doute que le code ici n'est pas le bon
    mais ma recherche se pose sur une (éventuelle) requête qui répondrait à cela

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Je ne suis pas autrement surpris, mais j'ai répondu, strictement, au cahier des charges de tes questions.
    Pour obtenir d'autres informations il faut passer par ce que l'on appelle des jointures.
    Plutôt que de te donner les requêtes toutes faites, je vais plutôt te recommander un peu (qqes pages quand même) de lecture.
    http://sqlpro.developpez.com/cours/sqlaz/jointures/
    La guerre des étoiles [SELECT *]

  5. #5
    Candidat au Club
    Profil pro
    manager
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : manager

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    merci pour le lien
    j'y étais déjà passé et franchement, je n'y ai rien compris.
    c'est un peu pour cela que j'ai fait appel au Forum, en espérant que, par la réponse, j'arrive à déchiffrer l'explication.
    Comme toujours, c'est par l'exemple que l'on comprend la théorie.
    Donc, si quelqu'un avait l'amabilité de me donner la réponse, je suis sûr qu'à mon tour, je pourrais prolonger la chaine et en faire profiter d'autres
    Merci

  6. #6
    Candidat au Club
    Profil pro
    manager
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : manager

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    pour (re)partir sur une base de réflexion, voici la query
    SELECT name
    FROM T_group
    WHERE id
    IN (
    SELECT group_id
    IN T_groupuser
    WHERE user_id =1
    )
    et la réponse : #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COW_access_conference_user where user_id = 1 )
    (mysql version 5.0.41)

  7. #7
    Candidat au Club
    Profil pro
    manager
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : manager

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ooops ... ça fonctionne
    merci

  8. #8
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par c-gundo Voir le message
    Ooops ... ça fonctionne
    merci
    Oui, mais tu prends un 30 tonnes pour transporter une allumette.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT tg.name
    FROM T_group tg
    INNER JOIN T_groupuser tgu ON tgu.user_id=tg.id
    WHERE tg.id =1

  9. #9
    Candidat au Club
    Profil pro
    manager
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : manager

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ca me parraît en effet plus léger, mais ça ne me donne pas le même résultat :-s

    voici les trois tables :

    T_user
    id.....name
    1......alain
    2......bertrand

    T_group
    id......name......public......active
    1......footbal........N............Y
    2......volley..........N............Y
    3......natation.......N...........Y
    4......athletisme....Y............Y

    T_groupuser
    id......group_id......user_id......level_id......active
    1............2...............1................1.............Y
    2............3...............1................1.............Y

    si je fais la requête

    SELECT name
    FROM T_group
    WHERE id IN (
    SELECT group_id
    FROM T_groupuser
    WHERE user_id = 1
    )

    j'obtiens : Volley et Natation


    Si je fais la requête :

    SELECT name
    FROM T_group tg
    INNER JOIN T_groupuser tgu ON tgu.user_id=tg.id
    WHERE tg.id =1

    j'obtiens : Football et Football

  10. #10
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Avec la structure des tables c'est plus facile.
    Tu pouvais au demeurant corriger toi-même si tu avais vraiment essayé de comprendre le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT name
    FROM T_group tg
    INNER JOIN T_groupuser tgu ON tgu.group_id=tg.id
    WHERE tgu.user_id =1
    Le psittacisme n'est pas ma conception favorite de l'apprentissage.

  11. #11
    Candidat au Club
    Profil pro
    manager
    Inscrit en
    Novembre 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : manager

    Informations forums :
    Inscription : Novembre 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci pour ta réponse,
    c'est en l'analysant que je commence à comprendre la mécanique.
    Je te remercie aussi pour ce mot "psittacisme" qui pourra surement me servir un jour prochain.
    Et je suis heureux de savoir qu'il existe de nombreuses méthodes d'apprentissage où chacun peut se retrouver sans se sentir diminué ou injurié parce qu'il n'a pas encore acquit la logique d'un langage qu'il découvre.

    Encore merci pour ton aide, en espérant que ces derniers mots ne passent pas pour de la quérulence

  12. #12
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Bon, je sens que je t'ai vexé et je te prie de m'en excuser.
    Je vais mettre ça sur le dos de la fatigue, avec la grève de mes collègues je suis sur le pont depuis 6:00 ce matin pour assurer la continuité du service public à nos internes.
    Mon naturel un peu cassant a repris le dessus.
    J'espère quand même t'avoir fait avancer et je t'engage à lire et relire les articles d'SQLPro, souvent si bien illustrés d'exemples nombreux, qui sont de vraies mines d'informations.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/09/2014, 18h12
  2. [AC-2007] Requête SELECT entre enregistrements d'une seule et même table
    Par tibofo dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/01/2013, 19h38
  3. Requête sql entre deux tables
    Par jojo86 dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/02/2008, 19h19
  4. [requête] liaison entre 2 tables
    Par bugprog dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 26/04/2007, 09h53
  5. [Requête] Sommes entre plusieurs tables
    Par Ithilien dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 05/01/2007, 15h34

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