Si votre relation d'amitié est symétrique, vous pouvez soit stocker chaque paire dans un enregistrement séparé :
friend1 friend2
A B
B A
A C
B D
C B
D B
et interrogez tous les B
les amis de aiment ça :
SELECT friend2
FROM friends
WHERE friend1 = 'B'
ou stocker l'utilisateur avec le moins id
dans le premier champ et celui avec le plus grand id
dans le second :
friend1 friend2
A B
A C
B D
et interrogez B
les amis de aiment ça :
SELECT friend1
FROM friends
WHERE friend2 = 'B'
UNION ALL
SELECT friend2
FROM friends
WHERE friend1 = 'B'
La première option est un peu plus efficace en MySQL
, et c'est la seule option si votre relation d'amitié n'est pas symétrique (comme sur LiveJournal
)
Voir cet article :