2010-04-21 6 views
3

Salut J'ai une base de données simple pour stocker l'amitié, avec seulement deux colonnes person_a, person_b, indiquant que person_a et person_b sont amis. A partir d'une grande liste comme celle-ci, quelle requête devrais-je lancer pour avoir dire à tous les amis de 'sam'. Je vous remercie.MySQL Comment sélectionner les amis d'une table d'amitié?

+0

Comment sont stockées des amitiés? Si 'sam' et 'baz' sont des amis, est-ce que 'sam' person_a ou person_b? –

+0

Peut-être la vraie question est, les amitiés sont-elles réflexives? Quelqu'un peut-il être mon ami, mais je ne suis pas leur ami? –

+1

Peut-être que vous devriez utiliser deux enregistrements pour une amitié, voir ici: http://stackoverflow.com/questions/2910134/friendship-database-schema. Au fait et @David Smith: une amitié non-réflexive n'existe pas. Ce n'est pas un ami, c'est un fan! –

Répondre

3

Utilisez un UNION:

SELECT person_b 
FROM friendship 
WHERE person_a = 'sam' 
UNION 
SELECT person_a 
FROM friendship 
WHERE person_b = 'sam' 
0

Vous pourriez vouloir essayer quelque chose comme

SELECT * 
FROM users u INNER JOIN 
     (
      SELECT CASE 
         WHEN person_a = yourid THEN 
          person_b 
         ELSE person_a 
        END person_id 
      FROM FRIENDSHIPS 
      WHERE person_a = yourid 
      OR  person_b = yourid 
     ) myFriends ON u.userID = myFriends.person_id 
1

Peut-être essayer comme ça,

SELECT person_a, person_b 
FROM friendship 
WHERE person_a = 'sam' or person_b = 'sam' 

Use the query like this, after that 

if(person_a=='sam') { 
    $frnd = $rowfetch["person_b"]; 
} else if(person_b=='sam') { 
    $frnd = $rowfetch["person_a"]; 
} 
Questions connexes