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 :

Double jointure sur une meme table


Sujet :

Requêtes MySQL

  1. #1
    Membre habitué Avatar de ecarbill
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Juin 2004
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 229
    Points : 147
    Points
    147
    Par défaut Double jointure sur une meme table
    Bonjour à tous.
    J'ai une table où j'enregistre des membres.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tblmembres (id_membres, pseudo, nom)
    Dans l'objectif de pouvoir mettre les membres en relation (un membre peu avoir un autre comme amis, ou sur sa liste noire), j'ai créer une table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tblrelations(id_relation, id_membre1, id_membre2, type_relation)
    Je veux écrire un sql qui affichent les amis du membre dont l'ID est 50.
    J'ecris le SQl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM tblrelations WHERE 
     id_membre1='50' OR id_membre2='50' 
    AND type_relation='1'
    Le problème est que cette requete renvoi les identifiants alors que moi je veux les pseudos des membres. Mais je ne vois pas bien comment avec un INNER JOIN recuperer les pseudos correspondants aux 2 colonnes id_membre1 et id_membre2.

    Merci de votre aide

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Pour avoir tous les amis dans une seule colonne, il faut faire une union de deux fois presque la même requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT m1.pseudo AS ami
    FROM tblmembres m1
    INNER JOIN tblrelations r1 ON r1.id_membre1 = m1.id
    WHERE r1.type_relation = 1
      AND r1.id_membre2 = 50
     
    UNION
     
    SELECT m2.pseudo AS ami
    FROM tblmembres m2
    INNER JOIN tblrelations r2 ON r2.id_membre2 = m2.id
    WHERE r2.type_relation = 1
      AND r2.id_membre1 = 50

  3. #3
    Membre averti

    Profil pro
    En reconversion
    Inscrit en
    Novembre 2007
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : En reconversion

    Informations forums :
    Inscription : Novembre 2007
    Messages : 180
    Points : 351
    Points
    351
    Par défaut autre solution avec une seule jointure pour tout
    Bonjour,
    Une autre solution avec une seule requête et jointure :
    On part de l'hypothèse qu'il y a réciprocité, si l'un est ami avec l'autre, l'autre est ami avec l'un.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT DISTINCT t2.id_membres, t2.nom
    -- on filtre les éléments uniques car membre1 peut être ami de membre2 et vice versa
    FROM tblrelations t1
    INNER JOIN tblmembres t2 ON ( t1.id_membre1 =50 OR t1.id_membre2 =50 )
    AND t1.type_relation =1
    -- on filtre ici au lieu du where pour limiter les résultats dans la jointure
    AND (t2.id_membres = t1.id_membre1 OR t2.id_membres = t1.id_membre2)
    -- on crée le lien entre les deux tables
    AND t2.id_membres <>50
    -- on enlève le membre sur lequel on fait la recherche
    Normalement je n'ai pas du me tromper, à tester sur un jeu de résultat.
    Bon courage

  4. #4
    Membre habitué Avatar de ecarbill
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Juin 2004
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 229
    Points : 147
    Points
    147
    Par défaut
    Merci beaucoup à CinePhil et patic pour les solutions qu'ils m'ont chacun proposé.
    Malheureusement, avec la solution de CinePhil , je recois le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Unable to parse query: "UNION" is not supported.
    Personnellement j'ai pensé que c'est lié au fait que mes tables sont de type INNODB. Finalement j'ai adopté la solution de patic .

    Mais à tous

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Union est très bien supporté par le moteur InnoDB !
    Quelle est ta version de MySQL ?

  6. #6
    Membre habitué Avatar de ecarbill
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Juin 2004
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 229
    Points : 147
    Points
    147
    Par défaut
    J'ai la version 5.1.54 de mysql

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par ecarbill Voir le message
    J'ai la version 5.1.54 de mysql
    Alors je ne comprends pas pourquoi tu as ce message !
    Il provient directement de MySQL ou tu attaques MySQL à travers un logiciel insuffisamment outillé ?

  8. #8
    Membre habitué Avatar de ecarbill
    Homme Profil pro
    Cyberdocumentaliste
    Inscrit en
    Juin 2004
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Cyberdocumentaliste
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 229
    Points : 147
    Points
    147
    Par défaut
    Ha ok, j'utilise dbForge sutio for mysql version 4.
    C'est peut être ça.

    Merci à tous pour vos contributions

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

Discussions similaires

  1. Double jointure sur une même table
    Par yosaaa dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/02/2015, 12h02
  2. double jointure sur la meme table
    Par erox44 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/04/2008, 17h28
  3. 2 jointures sur une meme table
    Par amamildor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2007, 17h24
  4. [MySQL] Plusieurs jointures sur une même table
    Par stephyyr dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 14h24
  5. DOUBLE REQUETE SUR UNE MEME TABLE
    Par MORAS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/01/2006, 13h40

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