Si su relación de amistad es simétrica, puede almacenar cada par en un registro separado:
friend1 friend2
A B
B A
A C
B D
C B
D B
y consulta todos los B A los amigos les gusta eso:
SELECT friend2
FROM friends
WHERE friend1 = 'B'
o almacenar el usuario con el menor id en el primer campo y el de mayor id en el segundo:
friend1 friend2
A B
A C
B D
y consulta B A los amigos les gusta eso:
SELECT friend1
FROM friends
WHERE friend2 = 'B'
UNION ALL
SELECT friend2
FROM friends
WHERE friend1 = 'B'
La primera opción es un poco más eficiente en MySQL , y esta es la única opción si su relación de amistad no es simétrica (como en LiveJournal )
Ver este artículo: