友情関係が対称的である場合は、各ペアを別々のレコードに保存できます。
friend1 friend2
A B
B A
A C
B D
C B
D B
すべてのBをクエリします そのようなの友達:
SELECT friend2
FROM friends
WHERE friend1 = 'B'
または、idが最小のユーザーを保存します 最初のフィールドと最大のidを持つフィールド 2番目のもの:
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のように) )
この記事を参照してください: