Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/02/2011, 17h56   #1
Membre du Club
 
Homme KONE
Inscription : juin 2004
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme KONE
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 109
Points : 43
Points : 43
Par défaut Double jointure sur une meme table

Bonjour à tous.
J'ai une table où j'enregistre des membres.
Code :
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 :
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 :
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
__________________
Une somme de savoirs en chaque matière, si minime soit-elle, rend n'importe quel benêt, dans un pays de benêts, docte.
ecarbill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 08h50   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 992
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 992
Points : 18 243
Points : 18 243
Envoyer un message via MSN à CinePhil
Pour avoir tous les amis dans une seule colonne, il faut faire une union de deux fois presque la même requête :
Code :
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
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 13h36   #3
Membre confirmé
 
Inscription : novembre 2007
Messages : 134
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 134
Points : 213
Points : 213
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 :
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
patic est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 10h34   #4
Membre du Club
 
Homme KONE
Inscription : juin 2004
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme KONE
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 109
Points : 43
Points : 43
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 :
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
__________________
Une somme de savoirs en chaque matière, si minime soit-elle, rend n'importe quel benêt, dans un pays de benêts, docte.
ecarbill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2011, 14h32   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 992
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 992
Points : 18 243
Points : 18 243
Envoyer un message via MSN à CinePhil
Union est très bien supporté par le moteur InnoDB !
Quelle est ta version de MySQL ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 12h02   #6
Membre du Club
 
Homme KONE
Inscription : juin 2004
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme KONE
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 109
Points : 43
Points : 43
J'ai la version 5.1.54 de mysql
__________________
Une somme de savoirs en chaque matière, si minime soit-elle, rend n'importe quel benêt, dans un pays de benêts, docte.
ecarbill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 14h31   #7
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 992
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 992
Points : 18 243
Points : 18 243
Envoyer un message via MSN à CinePhil
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é ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2011, 18h36   #8
Membre du Club
 
Homme KONE
Inscription : juin 2004
Messages : 109
Détails du profil
Informations personnelles :
Nom : Homme KONE
Localisation : Côte d'Ivoire

Informations professionnelles :
Secteur : Service public

Informations forums :
Inscription : juin 2004
Messages : 109
Points : 43
Points : 43
Ha ok, j'utilise dbForge sutio for mysql version 4.
C'est peut être ça.

Merci à tous pour vos contributions
__________________
Une somme de savoirs en chaque matière, si minime soit-elle, rend n'importe quel benêt, dans un pays de benêts, docte.
ecarbill est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h00.


 
 
 
 
Partenaires

Hébergement Web