@arsenaljek

Как отзеркалить сопутствующие товары?

Подскажите логику, как можно "отзеркалить" совместимые товары.
Нужно создать сопутствующие товары.
Создал отдельную таблицу.
"id""idProduct" "relatedProduct"
"1" "1885" "4683"
"2" "1885" "10446"
"3" "1885" "7817"
"4" "1885" "37483"
"5" "1885" "32148"
"6" "1885" "43781"
"7" "1885" "26731"
Зайдя в товар id1885 всё хорошо. Все, то, что я заполнил отображается, но я не понимаю, как сделать так, чтобы и на всех этих товарах для которых товар с id1885 совместим, тоже проставился id1885
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
@alexalexes
Вы этой таблицей кодируете граф (не важно чего).
Если принимаете за правило, что каждая запись кодирует ребро графа только в одном направлении (граф является направленным), то, чтобы добавить другое направление, тогда вам нужно вставить еще одну запись.
Например, существует ребро от вершины 1885 до вершины 4683, чтобы прописать ребро с обратным направлением, нужно вставить запись (4683, 1885).
Список ребер к присоединенным вершинам от данной вершины достаточно выбирать таким запросом:
select * from t
where t.idProduct = :id_product and t.relatedProduct <> :id_product -- сравнение с <> исключает петлю на собственной вершине

Если у вас граф ненаправленный, то можно обойтись одной записью. При получении выборки (ребер графа) вам нужно выбирать не только ребра от вершины idProduct до relatedProduct, но включать те записи, ребра которые прописаны от relatedProduct до idProduct.
Скорее всего запрос будет иметь такой вид:
select * from t
where (    (t.idProduct = :id_product and t.relatedProduct <> :id_product) -- сравнение с <> исключает петлю на собственной вершине
            or (t.relatedProduct = :id_product and t.idProduct <> :id_product))

Но обязательно нужно определиться, работает ли совместимость товаров в обе стороны, от этого зависит выбор типа графа и правила его чтения/записи.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы