2010-04-21 130 views
3

嗨我有一个简单的数据库来存储友谊,只有两列person_a,person_b,表示person_a和person_b是朋友。从这样的大列表中,我应该运行什么查询来获得'sam'的所有朋友。谢谢。MySQL如何从友谊表中选择朋友?

+0

如何存储的友谊?如果'sam'和'baz'是朋友,那么'sam'person_a或person_b? – 2010-04-21 04:43:44

+0

也许真正的问题是,友谊是否反射?有人能成为我的朋友,但我不是他们的朋友吗? – 2010-04-21 04:53:04

+1

也许你应该使用两个记录的友谊,看到这里:http://stackoverflow.com/questions/2910134/friendship-database-schema。顺便说一句,@戴维史密斯:不存在反身友谊。那不是朋友,那是粉丝! – 2010-05-28 14:20:30

回答

3

使用UNION:

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

你可能想尝试像

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

可能尝试这样,

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"]; 
}