Если ваши дружеские отношения симметричны, вы можете хранить каждую пару в отдельной записи:
friend1 friend2
A B
B A
A C
B D
C B
D B
и отправьте запрос всем друзьям B
следующим образом:
SELECT friend2
FROM friends
WHERE friend1 = 'B'
или сохраните пользователя с наименьшим id
в первом поле и с наибольшим id
во втором:
friend1 friend2
A B
A C
B D
и запросить друзей B
вот так:
SELECT friend1
FROM friends
WHERE friend2 = 'B'
UNION ALL
SELECT friend2
FROM friends
WHERE friend1 = 'B'
Первый вариант немного более эффективен в MySQL
, и это единственный вариант, если ваши дружеские отношения не симметричны (как в LiveJournal
)
См. Эту статью: