Probleme de jointure

MissOleana Messages postés 4 Statut Membre -  
 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 ?

3 réponses

Utilisateur anonyme
 
salut

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
0
MissOleana Messages postés 4 Statut Membre
 
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')
0
Utilisateur anonyme
 
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)

SELECT Expediteur as nom FROM amis WHERE Destinataire= '$utilisateur'
Union
SELECT Destinataire FROM amis WHERE Expediteur= '$utilisateur'

On peut éviter l'union en utilisant
  OR   
et
  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
0
MissOleana Messages postés 4 Statut Membre
 
Tu es très fort nagashima, tu répond aux entraides du forum avec une clarté et une exactitude impressionnante, merci de ton aide précieuse, la requête que tu m'a formulé est totalement exacte et fonctionne parfaitement.
0
Utilisateur anonyme
 
parfais alors =) merci de tous ces compliments =D

bon dev ;)
naga
0