Задать вопрос

Персоны ссылаются друг на друга, как лучше хранить это в базе?

Персоны ссылаются друг на друга, как лучше хранить это в базе?

Если сделать поля "person_1" и "person_2", то при поиске связей, придется искать по обоим, т.к. оба значения могут быть как в одном поле, так и во втором.

Например:
P1 - P2
P3 - P1
P2 - P3
Надо отобрать связи персоны P1, но в первой записи P1 в первом поле, во второй - во втором.
Надо отобрать связи персоны P2, первой записи P2 во втором поле, в третьей - в первом.

Или делать избыточный вариант и сохранять
P1 - P2
P2 - P1
P3 - P1
P1 - P3
P2 - P3
P3 - P2
?
  • Вопрос задан
  • 65 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А в чём проблема?
SELECT `person_1`
  FROM `table`
  WHERE `person_2` = :id
UNION SELECT `person_2`
  FROM `table`
  WHERE `person_1` = :id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Я могу посоветовать такой вариант для поиска контактов :
select 
	:id as person,
	IF (person_1 = :id, person_2, person_1) person_contact
from persons
where person_1 = :id or person_2 = :id
;


Не забудьте добавить составной индекс на обоих полях, тогда выборка будет использовать его.

прверить SQL запрос
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы