Jump to content
Search In
  • More options...
Find results that contain...
Find results in...
  • Sign Up

Как безопасно удалить 6к товара...?


Recommended Posts

Всем привет, возникла такая вот проблемка.. Товары одного поставщика были загружены "как вышло" - если точнее часть опций отдельными товарами, объединялось все это с помощью модуля KIT SERIES в один товар.. что само собой не есть гуд .. так ка десятки дублей одного товара с разницей в одну опцию совсем не удобно и вызывает дополнительную нагрузку на хостинг при загрузке страницы категории с товаром .. 

было решено перегрузить все "нормально" то есть 1 товар и "связанные опции" с "изображениями опций про" .. тут тоже еще пляшем с бубном )) но уже вроде есть свет в конце тоннеля.. 

 

Суть проблемы: нужно удалить поставщика из базы так как при повторной загрузке в базе скорее всего будут проблемы с дублями артикулов .. может ошибаюсь конечно  .. 

                               если нет - то как удалить 6000 товаров и не получить битые ссылки ..


Пока писал придумал один вариант - это батч эдитором - изменить все артикула по поставщику и сделать наличие 0...

Что подскажите ? 

 

Р/S

так же требуется человек который сможет загрузить с помощью АОП  поставщика с "связанными опциями" и "изображениями опций про"

 

Edited by l1key
Link to post
Share on other sites

если задача актуальна, то решается за пару минут простым sql-запросом вида

-- вот этот запрос покажет все нужные Вам товары
SELECT * FROM oc_product op WHERE op.manufacturer_id = 11;
-- если запрос выше показал то, что Вам нужно, то этот запрос ВЫКЛЮЧИТ указанные товары 
UPDATE oc_product op SET op.status = 0 WHERE op.manufacturer_id = 11;
-- ну а этим запросом можно, как говорится, с глаз долой из базы вон ))
DELETE FROM oc_product op WHERE op.manufacturer_id = 11;

где manufacturer_id = ??? легко подсмотреть, открыв в админке "каталог" - "производители", навести мышкой на карандашик напротив нужного Вам бренда и опустив глаза вниз окошка браузера, в поисках вот этой строки

Spoiler

image.png.8c0bd873977cd587e9b8807e8498ff67.png

 

Важно! Прежде всего выполните первый запрос, который select. ТОЛЬКО если он покажет в результатах нужные товары, можете выполнять update или delete. Если не уверены в своих действиях при выполнении запросов вида update \ delete, то делайте бэкапы базы\таблицы!

Edited by 100napb
Link to post
Share on other sites
$query = $this->db->query("SELECT product_id FROM " . DB_PREFIX . "product WHERE manufacturer_id = '11'");

if ($query->num_rows) {
	foreach ($query->rows as $result) {
		$this->db->query("DELETE FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_filter WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_option_value WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_related WHERE related_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_reward WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_download WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_to_store WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "product_recurring WHERE product_id = " . (int)$result['product_id'];
		$this->db->query("DELETE FROM " . DB_PREFIX . "review WHERE product_id = '" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "url_alias WHERE query = 'product_id=" . (int)$result['product_id'] . "'");
		$this->db->query("DELETE FROM " . DB_PREFIX . "coupon_product WHERE product_id = '" . (int)$result['product_id'] . "'");
	}
}

не надо благодарностей, просто поставь лайк сообщению.

  • +1 1
Link to post
Share on other sites
26 minutes ago, chukcha said:

НУ-НУ..
Т.е. таблиц, кроме oc_prodict - нет?

Да, Вы правы. Поторопился. Прошу прощения.

Ниже @auditor предложил гораздо более полное\правильное решение.

 

 

Link to post
Share on other sites

Если и удалять, то используя стандартный метод deleteProduct

 

Учтите, что в этот метод может быть добавлена логика из других модулей и связанных таблиц 

  • +1 1
Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.