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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du 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
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    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
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre du 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
    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 : 73
    Localisation : France, Finistère (Bretagne)

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

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    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 *]
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  5. #5
    Membre du 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
    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
    Membre du 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
    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)

+ 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