Se la tua relazione di amicizia è simmetrica, puoi archiviare ciascuna coppia in un record separato:
friend1 friend2
A B
B A
A C
B D
C B
D B
e interroga tutti i B
amici di questo tipo:
SELECT friend2
FROM friends
WHERE friend1 = 'B'
o archiviare l'utente con meno id
nel primo campo e quello con id
maggiore nel secondo:
friend1 friend2
A B
A C
B D
e interroga B
amici di questo tipo:
SELECT friend1
FROM friends
WHERE friend2 = 'B'
UNION ALL
SELECT friend2
FROM friends
WHERE friend1 = 'B'
La prima opzione è un po' più efficiente in MySQL
, e questa è l'unica opzione se la tua relazione di amicizia non è simmetrica (come su LiveJournal
)
Vedi questo articolo: