Probleme de jointure
MissOleana
Messages postés
4
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour à tous, je viens à vous car je n'arrive pas à faire ma jointure avec une requête qui exécute déjà une union
Voici ma requête de base, Elle me permet de rechercher mes amis qui ont confirmé ma demande (vice et versa).
SELECT Expediteur, time FROM amis WHERE Destinataire= '$utilisateur' Union SELECT Destinataire, time FROM amis WHERE Expediteur= '$utilisateur' order by time
Je désire que cette soit couplé avec une jointure sur ma table "compte" pour afficher les membres en ligne uniquement !
+--------------+-------------------+
| Nom | time |
+--------------+-------------------+
| Pierre | 1 |
| Julia | 0 |
| MissOlana | 0 |
+--------------+--------------------+
Résultat espéré: Mon ami Pierre est en ligne, quelqu'un à une idée ?
Voici ma requête de base, Elle me permet de rechercher mes amis qui ont confirmé ma demande (vice et versa).
SELECT Expediteur, time FROM amis WHERE Destinataire= '$utilisateur' Union SELECT Destinataire, time FROM amis WHERE Expediteur= '$utilisateur' order by time
Je désire que cette soit couplé avec une jointure sur ma table "compte" pour afficher les membres en ligne uniquement !
+--------------+-------------------+
| Nom | time |
+--------------+-------------------+
| Pierre | 1 |
| Julia | 0 |
| MissOlana | 0 |
+--------------+--------------------+
Résultat espéré: Mon ami Pierre est en ligne, quelqu'un à une idée ?
A voir également:
- Probleme de jointure
- Jointure excel - Guide
- Pb de jointure ✓ - Forum MySQL
- Problème jointure mysql (php) ✓ - Forum Webmastering
- [Excel,vba,ado] faire une jointure de tables - Forum VB / VBA
- Jointure en php - Forum PHP
3 réponses
salut
il faudrait la structure de ta table, sans ca on peu pas aider des masses ;)
naga
Je désire que cette soit couplé avec une jointure sur ma table "compte" pour afficher les membres en ligne uniquement !
il faudrait la structure de ta table, sans ca on peu pas aider des masses ;)
naga
Merci à toi nagashima de ta réponse aussi rapide.
Voici ma structure:
J'ai une table "amis" et j'affiche mes amis qui ont accepté la demande d'amitié mais aussi les amis qui ont eux accepté mon amitié.
Je m'explique avec un tableau
La table "amis"
+--------------++-----------+-----
| Destinataire | Expediteur |
+--------------++-----------+-----
| MissOlana | laure |
| Pierre | MissOlana |
| Julia | MissOlana |
| MissOlana | martine |
+-----------++-----------+----
J'arrive à afficher mes amis avec la requête suivante:
SELECT Expediteur, time FROM amis WHERE Destinataire= '$utilisateur' Union SELECT Destinataire, time FROM amis WHERE Expediteur= '$utilisateur' order by time
Le résultat de cette requête:
Mes amis:
laure
Pierre
Julia
martine
(il n'y a pas mon nom dans la liste)
et je voudrais maintenant afficher ma liste d'amis uniquement connectés en utilisant les informations de la table "compte"
La table "compte"
+--------------+-------+
| Nom | time |
+--------------+-------+
| Pierre | 1 |
| Julia | 0 |
| MissOlana | 0 |
+--------------+-------+
Ma requête experé est d'avoir uniquement Pierre en ligne (car valeur = '1')
Voici ma structure:
J'ai une table "amis" et j'affiche mes amis qui ont accepté la demande d'amitié mais aussi les amis qui ont eux accepté mon amitié.
Je m'explique avec un tableau
La table "amis"
+--------------++-----------+-----
| Destinataire | Expediteur |
+--------------++-----------+-----
| MissOlana | laure |
| Pierre | MissOlana |
| Julia | MissOlana |
| MissOlana | martine |
+-----------++-----------+----
J'arrive à afficher mes amis avec la requête suivante:
SELECT Expediteur, time FROM amis WHERE Destinataire= '$utilisateur' Union SELECT Destinataire, time FROM amis WHERE Expediteur= '$utilisateur' order by time
Le résultat de cette requête:
Mes amis:
laure
Pierre
Julia
martine
(il n'y a pas mon nom dans la liste)
et je voudrais maintenant afficher ma liste d'amis uniquement connectés en utilisant les informations de la table "compte"
La table "compte"
+--------------+-------+
| Nom | time |
+--------------+-------+
| Pierre | 1 |
| Julia | 0 |
| MissOlana | 0 |
+--------------+-------+
Ma requête experé est d'avoir uniquement Pierre en ligne (car valeur = '1')
Ok ! c'est plus facile à comprendre ;)
Pour première chose, ta première requête est bonne (je rajoute juste l'alias et je retire time qui n'est pas dans la table amis)
On peut éviter l'union en utilisant
à toi de voir, mais c'est toujours intéressant de voir différentes possibilités.
ensuite, on va récupérer seulement les utilisateur que cette requête ramenera en utilisant une jointure strict :
Et donc, tu récupèrera seulement tes amis connectés.
on aura aussi pu faire :
demande si je suis pas clair.
naga
Pour première chose, ta première requête est bonne (je rajoute juste l'alias et je retire time qui n'est pas dans la table amis)
SELECT Expediteur as nom FROM amis WHERE Destinataire= '$utilisateur'
Union
SELECT Destinataire FROM amis WHERE Expediteur= '$utilisateur'
On peut éviter l'union en utilisant
ORet
IF:
SELECT distinct if(Expediteur = '$utilisateur' , Destinataire , Expediteur) as Nom
FROM amis
where ( Destinataire= '$utilisateur' OR Expediteur= '$utilisateur' )
à toi de voir, mais c'est toujours intéressant de voir différentes possibilités.
ensuite, on va récupérer seulement les utilisateur que cette requête ramenera en utilisant une jointure strict :
select compte.Nom, compte.time
from (
ICI LA REQUETE QUE TU VOUDRAS UTILISER
) as Sub
join compte on compte.nom = Sub.nom and compte.time = 1;
Et donc, tu récupèrera seulement tes amis connectés.
on aura aussi pu faire :
select compte.Nom
from compte
join amis a1 on a1.Expediteur = '$utilisateur' and a1.Destinataire = compte.nom
join amis a2 on a2.Destinataire = '$utilisateur' and a2.Expediteur = compte.nom
where compte.time = 1
demande si je suis pas clair.
naga