Probleme de jointure

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

  1. 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
    1. 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')
      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)

        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
    2. 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.
      1. parfais alors =) merci de tous ces compliments =D

        bon dev ;)
        naga