2010-04-21 4 views
3

Привет У меня есть простая база данных для хранения дружбы, всего два столбца person_a, person_b, означающие, что person_a и person_b являются друзьями. Из большого списка вроде этого, какой запрос я должен запустить, чтобы получить ответ, получите всех друзей «sam». Спасибо.MySQL Как выбрать друзей из таблицы дружбы?

+0

Как дружба сохраненную? Если «sam» и «baz» являются друзьями, это «sam» person_a или person_b? –

+0

Возможно, настоящий вопрос: дружеские отношения рефлексивные? Может кто-то быть моим другом, но я не буду их другом? –

+1

Возможно, вы должны использовать две записи для дружбы, см. Здесь: http://stackoverflow.com/questions/2910134/friendship-database-schema. Кстати, и @David Smith: не рефлексивная дружба не существует. Это не друг, это фанат! –

ответ

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"]; 
} 
Смежные вопросы