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

Тема в разделе "PHP", создана пользователем MilkeyWay, 7 июн 2018.

Статус темы:
Закрыта.
Модераторы: latteo
  1. MilkeyWay

    MilkeyWay Постоялец

    Регистр.:
    11 июл 2011
    Сообщения:
    144
    Симпатии:
    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
    
    своими силами,что-то не догоняю совсем,как это реализовать,нид хелп
     
  2. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    670
    Симпатии:
    521
    Если я правильно понял задачу, то кажется нужен еще один вложенный цикл по product_id, чтобы можно было каждый product_related соотнести с каждым product_id
     
  3. MilkeyWay

    MilkeyWay Постоялец

    Регистр.:
    11 июл 2011
    Сообщения:
    144
    Симпатии:
    10
    да вот тоже где-то рядом в мыслях:

    сделать выборку по product_id,получаю 1451 и 1452,а как дальше их связать между собой-не пойму( с учетом того,что сопутствующих товаров может быть 0 или от 1 до ++)
     
  4. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    670
    Симпатии:
    521
    Делаем цикл по product_id, к примеру первый элемент product_id = 1450, смотрим все сопутствующие товары для 1450 - это 1451 и 1452, устанавливаем что 1451 и 1452 являются сопутствующими друг-другу. В итоге получаем искомую таблицу зависимостей. Как-то так, дальше уже просто код написать :)
     
  5. MilkeyWay

    MilkeyWay Постоялец

    Регистр.:
    11 июл 2011
    Сообщения:
    144
    Симпатии:
    10
    не совсем понял... 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'] . "'");
                                }
                            }
                        }
                    }
     
    Последнее редактирование: 8 июн 2018
  6. Nei

    Nei Nosce te ipsum

    Регистр.:
    5 сен 2009
    Сообщения:
    670
    Симпатии:
    521
    Под "Делаем цикл по product_id" я имел ввиду цикл по всем продуктам, чтобы единожды запустив функцию изменить формат таблицы сопутствующих товаров с первого варианта на второй для всех продуктов.
    Впрочем, в любом случае неважно, я так понимаю, задача решена.
     
Статус темы:
Закрыта.