Nếu mối quan hệ bạn bè của bạn là đối xứng, bạn có thể lưu trữ từng cặp trong một bản ghi riêng:
friend1 friend2
A B
B A
A C
B D
C B
D B
và truy vấn tất cả B
của những người bạn như thế:
SELECT friend2
FROM friends
WHERE friend1 = 'B'
hoặc lưu trữ người dùng với id
ít nhất trong trường đầu tiên và trường có id
lớn nhất trong cái thứ hai:
friend1 friend2
A B
A C
B D
và truy vấn B
của những người bạn như thế:
SELECT friend1
FROM friends
WHERE friend2 = 'B'
UNION ALL
SELECT friend2
FROM friends
WHERE friend1 = 'B'
Tùy chọn đầu tiên hiệu quả hơn một chút trong MySQL
và đây là lựa chọn duy nhất nếu mối quan hệ bạn bè của bạn không đối xứng (như trên LiveJournal
)
Xem bài viết này: