Свзяать значения массива между собой

Статус
В этой теме нельзя размещать новые ответы.

MilkeyWay

Постоялец
Регистрация
11 Июл 2011
Сообщения
142
Реакции
10
Всем привет!

Мозг закипел,ничего на ум не приходит,по-этому обращаюсь вновь за помощью к вам:

дано:

опенкарт-хочу переделать немного сопутствующие товары(которые указываются в карточке товара)

вот так идет запись в БД:
Код:
if (isset($data['product_related'])) {
            foreach ($data['product_related'] as $related_id) {
                $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "' AND related_id = '" . (int)$related_id . "'");
                $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$product_id . "', related_id = '" . (int)$related_id . "'");
                $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id . "' AND related_id = '" . (int)$product_id . "'");
                $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id . "', related_id = '" . (int)$product_id . "'");
            }
        }

получается:
Код:
product_id    related_id
1450        1451
1450        1452
1451        1450
1452        1450
это если к товару 1450 добавить два сопутствующих товара 1451 и 1452

нужно,чтобы у сопутствующих товаров связь была между собой, не только к которому добавлены товары,т.е:
Код:
product_id    related_id
1450        1451
1450        1452
1451        1450
1451        1452
1452        1450
1452        1451

своими силами,что-то не догоняю совсем,как это реализовать,нид хелп
 
Если я правильно понял задачу, то кажется нужен еще один вложенный цикл по product_id, чтобы можно было каждый product_related соотнести с каждым product_id
 
Если я правильно понял задачу, то кажется нужен еще один вложенный цикл по product_id, чтобы можно было каждый product_related соотнести с каждым product_id
да вот тоже где-то рядом в мыслях:

сделать выборку по product_id,получаю 1451 и 1452,а как дальше их связать между собой-не пойму( с учетом того,что сопутствующих товаров может быть 0 или от 1 до ++)
 
Делаем цикл по product_id, к примеру первый элемент product_id = 1450, смотрим все сопутствующие товары для 1450 - это 1451 и 1452, устанавливаем что 1451 и 1452 являются сопутствующими друг-другу. В итоге получаем искомую таблицу зависимостей. Как-то так, дальше уже просто код написать :)
 
Делаем цикл по product_id, к примеру первый элемент product_id = 1450, смотрим все сопутствующие товары для 1450 - это 1451 и 1452, устанавливаем что 1451 и 1452 являются сопутствующими друг-другу. В итоге получаем искомую таблицу зависимостей. Как-то так, дальше уже просто код написать :)
не совсем понял... product_id-просто int(),в функцию приходят сопутствующие товары в виде массива-как их свзять

upd вроде нашел выход:

Код:
$query_related_id = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$product_id . "'");
                if ($query_related_id->rows) {
                    foreach ($query_related_id->rows as $related_id1) {
                        foreach ($query_related_id->rows as $related_id2) {
                            $this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$related_id1['related_id'] . "' AND related_id = '" . (int)$related_id2['related_id'] . "'");
                            if ($related_id1 != $related_id2) {
                                $this->db->query("INSERT INTO " . DB_PREFIX . "product_related SET product_id = '" . (int)$related_id1['related_id'] . "', related_id = '" . (int)$related_id2['related_id'] . "'");
                            }
                        }
                    }
                }
 
Последнее редактирование:
Под "Делаем цикл по product_id" я имел ввиду цикл по всем продуктам, чтобы единожды запустив функцию изменить формат таблицы сопутствующих товаров с первого варианта на второй для всех продуктов.
Впрочем, в любом случае неважно, я так понимаю, задача решена.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху