Связать дочерние записи php + mysql

221
27 июня 2018, 04:20

Есть интернет магазин. Я добавляю 2 товара (Б и С) у товара А как рекомендуемые. Я уже написал двустороннюю связь, то есть у товара Б и С появляется рекомендуемый товар А. В чем вопрос, как связать товары Б и С между собой, после того как добавил их в рекомендуемые товары товару А?

Пока код выглядит так...

public function add_related_product($product_id, $related_id, $position=0) {
    $query = $this->db->placehold("INSERT IGNORE INTO __related_products SET product_id=?, related_id=?, position=?", $product_id, $related_id, $position);
    $queryZ = $this->db->placehold("INSERT IGNORE INTO __related_products SET product_id=?, related_id=?, position=?", $related_id, $product_id, $position);
    $this->db->query($query);
    $this->db->query($queryZ);
    return $related_id;
}
Answer 1

Как я понял вопрос:

Есть связи (A->B), (A->C). Они двунаправленные: есть также (B->A), (C->A).
Хотелось бы иметь связи (B->C) и (С->B) на основании вышеприведённых связей.

Мне кажется, что хранить полный граф связанных товаров - не лучшая идея.
Лучше завести сущность "СвязкиТоваров" как списки и пополнять их.
Для структуры выше, это будет одна связка: (Linked#1 -> [A, B, C])

В базе это может выглядеть как-то так:

Goods (id, title)
31 A
32 B
33 C
LinkedGoodsList (id[, title])  
1  Linked#1
LinkedGoods (id, list_id, goods_id)
7  1  31
7  1  32
7  1  33

Таким образом, вы всегда можете получить список связанных с данным товаров.

READ ALSO
SOLR как искать полный адрес?

SOLR как искать полный адрес?

Кто либо работал с базой адресов ФИАС? Дак вот, мы эту базу загрузили в СОЛР коллекциюв кратце она имеет формат:

240
Добавление экранного диктора в вебсайт

Добавление экранного диктора в вебсайт

Как добавить и настроить экранного диктора в своем веб-сайте? Он должен произнести слова при нажатии

163