CREATE TABLE (friend_id_a, friend_id_b, accepted)
Определить ограничение: friend_id_a < friend_id_b
.
Заполните таблицу своими сущностями следующим образом:
INSERT
INTO friend_friend(friend_id_a, friend_id_b)
VALUES (LEAST(@id1, @id2), GREATEST(@id1, @id2))
Чтобы выбрать всех друзей человека:
SELECT friend_id_b
FROM friend_friend
WHERE friend_id_a = @id
AND accepted
UNION ALL
SELECT friend_id_a
FROM friend_friend
WHERE friend_id_b = @id
AND accepted
UNION ALL здесь позволяет вам использовать индексы и избежать дополнительной сортировки для уникальности.
Все вышеизложенное относится к «дружеским отношениям» как к симметричным и антирефлексивным отношениям. Это означает, что: