Problème requête SQL

Résolu
Bonjour tout le monde,
Je suis entrain de développer une messagerie instantanée avec php-mysql j'ai rencontré un problème sur une de mes requêtes SQL. Voici les structures de mes tables dont la requête doit utiliser:
membres (pseudo,prenom,nom) et connaitre (#mem_pseudo,#pseudo)

Voici la requête:

$query="select distinct m.pseudo,prenom,nom from membres m, connaitre c where c.pseudo='$pseudo' and c.mem_pseudo=m.pseudo or c.pseudo=m.pseudo ";
$result = mysql_query($query) or die(mysql_error());


$pseudo est une variable session
Cette requête me permet d'afficher tous les amis d'un membre qui est connecté

Maintenant le problème est qu'il y a un des membres qui est ami à tous les autres membres tel n'est pas le cas dans ma base de données

7 réponses

  1. Bonjour, pourrais-tu expliquer un peu mieux ton problème et tes besoins ?
    0
    1. pour un membre donné je veux avoir la requête qui permet d'afficher la liste de ces amis
      0
      1. Ce n'est pas ce que fait ta requête ?
        "Cette requête me permet d'afficher tous les amis d'un membre qui est connecté "
        0
    2. biensur que la requête affiche tous les amis d'un membre qui est connecté mais le problème est qu'il y a un des membres qui est ami à tous les autres membres tel n'est pas le cas pour certains membres dans ma base de données
      0
      1. Désolé, je ne comprends pas...
        Pourquoi le fait qu'un des membre soit ami avec tout les autre soit un problème ? Et pourquoi le fait que certains membres ne soient pas amis avec tout les autres soit un problème aussi ? '-.-

        Désolé ^^, je voudrais t'aider, mais je ne te comprends pas.
        0
    3. Voici les enregistrements de ma table membres

      biba02 Khaditia Diagn
      faicha Aissatou Samb
      faicha86 Aicha Samb
      gahmed Ahmad Diem


      et voici les enregistrements de ma table connaitre

      biba02 faicha
      biba02 gahmed


      D'après ces enregistrements biba02 est ami qu'avec faicha et gahmed mais lorsque je regarde la liste des amis de faicha86 j'y trouve biba02.
      C'est ça mon problème
      0
      1. Dans la table connaitre "mem_pseudo" correspond on membre qui a choisit pour ami "pseudo".
        Il faut selectionner tout les membres dans la table membres qui existe lorseque mem_pseudo=$pseudo :

        SELECT DINSTINCT m.pseudo, prenom, nom FROM membres AS m, connaitre AS c WHERE c.mem_pseudo='$pseudo' AND m.pseudo=c.pseudo;


        Si c'est l'inverse (mem_pseudo correspond à l'ami et non à celui qui a choisit) il faut inverser c.mem_pseudo et c.pseudo.

        J'espère que c'est ce que tu veux :)
        0
    4. il faut prendre en compte les deux sens car sur la table connaitre on peut le lire de deux manières:
      - "mem_pseudo" a choisi pour ami "pseudo"
      -"pseudo" a choisi pour ami "mem_pseudo"

      Ce qui va donner pour la requête:

      SELECT DINSTINCT m.pseudo, prenom, nom FROM membres AS m, connaitre AS c WHERE c.mem_pseudo='$pseudo' AND m.pseudo=c.pseudo 
        OR c.pseudo='$pseudo' AND m.pseudo=c.mem_pseudo; 
      


      Merci beaucoup Defouille de ton aide
      0
      1. Si une personne choisi un ami, la personne choisi a automatiquement la personne qui l'a choisi pour ami ?
        Je pense que l'idéal serait de ne lire que dans un sens.
        0
    5. si on lit dans un sens il y'a un problème car l'amitié ne s'affichera que chez un seul membre ce qui n'est pas normal. Je m'explique :
      "mem_pseudo" correspond on membre qui a choisit pour ami "pseudo" voici sa requête
      SELECT DINSTINCT m.pseudo, prenom, nom FROM membres AS m, connaitre AS c WHERE c.mem_pseudo='$pseudo' AND m.pseudo=c.pseudo 
      

      Voici les enregistrements de ma table membres

      biba02 Khaditia Diagn
      faicha Aissatou Samb
      faicha86 Aicha Samb
      gahmed Ahmad Diem

      et voici les enregistrements de ma table connaitre

      biba02 faicha
      biba02 gahmed

      avec ces enregeristrements quand biba02 se connecte il verra qu'il est ami avec gahmed et faicha.
      Mais quand gahmed se connecte il ne verra pas sur la liste de ses amis biba02 c'est pourquoi j'ai ajouté ça sur la requête
      OR c.pseudo='$pseudo' AND m.pseudo=c.mem_pseudo
      0
      1. Je crois que j'ai compris, essaye avec :

        SELECT DINSTINCT m.pseudo, prenom, nom 
        FROM membres AS m, connaitre AS c 
        WHERE (c.mem_pseudo='$pseudo' AND c.pseudo=m.pseudo)
        OR (c.pseudo='$pseudo' AND c.mem_pseudo=m.pseudo)


        On va y arriver ! :p
        0
    6. c'est bon maintenant
      Merci beaucoup Defouille de ton aide
      0