友情関係が対称的である場合は、各ペアを別々のレコードに保存できます。
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
のように) )
この記事を参照してください: