Jump to content
Sign in to follow this  
Helloween

Массовое удаление товаров по ID

Recommended Posts

Всем привет. Возникла такая задача:

Необходимо удалить из базы группу товаров с определенными ID (товар больше не производится)

ID не идут подряд, поэтому рассматриваю вариант - загнать ID в массив и перебором этого массива удалить их из всех таблиц БД.

Но не могу построить правильный запрос к БД.

Кто может посодействовать?

 

Например, в массиве (2346,9567,23456,1,14,1546)

То есть, ID могут быть от 1-значных до 5-значных

Желательно, чтобы скрипт (или запрос) работал по всем таблицам, имеющим в своей структуре product_id

Share this post


Link to post
Share on other sites

Проще всего из админки в списке товаров пометить ненужные галочками и нажать удалить. Это конечно, если нет так много товаров на удаление. Зато корректно получится - все упоминания этих товаров из базы удалятся (только в заказах сохранятся, что логично)

 

Как вариант еще - можно не удалять совсем, а создать для них новый статус при отсутствии, например "снято с производства".

Share this post


Link to post
Share on other sites

Проще всего из админки в списке товаров пометить ненужные галочками и нажать удалить. Это конечно, если нет так много товаров на удаление. Зато корректно получится - все упоминания этих товаров из базы удалятся (только в заказах сохранятся, что логично)

 

Как вариант еще - можно не удалять совсем, а создать для них новый статус при отсутствии, например "снято с производства".

151 позиция, не по порядку, в разных категориях, у разных производителей... Короче, на одну страницу в админке они никак не попадут.

Статус создавать еще геморройнее, чем просто по одному удалять.

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

 

Вот эта штуковина справится с этим и не только с этим :-)

Штука, наверное, крутая... Но ради 151 товара 1200 рублей - это не смешно.

 

А вот это решение довольно интересно:

Я так полагаю, можно создать цикл, в котором проходятся все внесенные в массив ID и поочереди подставляются в строку на удаление:

$this->db->query("DELETE FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "'");

Остается только правильно дописать этот код, добавив сам цикл и все необходимые таблицы...

Share this post


Link to post
Share on other sites

151 позиция, не по порядку, в разных категориях, у разных производителей... Короче, на одну страницу в админке они никак не попадут.

Статус создавать еще геморройнее, чем просто по одному удалять.

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

 

Штука, наверное, крутая... Но ради 151 товара 1200 рублей - это не смешно.

 

А вот это решение довольно интересно:

Я так полагаю, можно создать цикл, в котором проходятся все внесенные в массив ID и поочереди подставляются в строку на удаление:

$this->db->query("DELETE FROM " . DB_PREFIX . "product_description WHERE product_id = '" . (int)$product_id . "'");

Остается только правильно дописать этот код, добавив сам цикл и все необходимые таблицы...

 

WHERE product_id IN ( 2346,9567,23456,1,14,1546 )

Цикл не нужен

Share this post


Link to post
Share on other sites

Циклом, на мой взгляд, удобнее, так как удалять надо из нескольких таблиц  сразу. Поэтому проще засунуть все строки в цикл, чем писать для каждой строки условие WHERE.

Тем более, 151 товар (нужно удалить на данный момент) вот так в условие не впишешь. Нужно именно внести все ID в массив и цикл нужен именно для того, чтобы по очереди выбирать и подставлять в условие WHERE один ID.

 

Мне кажется такое решение логичнее и, если можно так выразиться, оптимизированнее, то есть, менее ресурсозатратно.

 

Кстати, хорошая идея для реализации модуля удаления товаров... :)

Если есть желающие поучаствовать - велкам в личку!

Share this post


Link to post
Share on other sites

Имелось в виду это

DELETE t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15
FROM product t1
LEFT JOIN product_attribute t2 ON(t1.product_id=t2.product_id)
LEFT JOIN product_description t3 ON(t1.product_id=t3.product_id)
LEFT JOIN product_discount t4 ON(t1.product_id=t4.product_id)
LEFT JOIN product_image t5 ON(t1.product_id=t5.product_id)
LEFT JOIN product_option t6 ON(t1.product_id=t6.product_id)
LEFT JOIN product_option_value t7 ON(t1.product_id=t7.product_id)
LEFT JOIN product_related t8 ON(t1.product_id=t8.product_id)
LEFT JOIN product_reward t9 ON(t1.product_id=t9.product_id)
LEFT JOIN product_special t10 ON(t1.product_id=t10.product_id)
LEFT JOIN product_to_category t11 ON(t1.product_id=t11.product_id)
LEFT JOIN product_to_download t12 ON(t1.product_id=t12.product_id)
LEFT JOIN product_to_layout t13 ON(t1.product_id=t13.product_id)
LEFT JOIN product_to_store t14 ON(t1.product_id=t14.product_id)
LEFT JOIN review t15 ON(t1.product_id=t15.product_id)
WHERE t1.product_id IN ( 2346,9567,23456,1,14,1546 )

Share this post


Link to post
Share on other sites

151 товар вот так в условие не впишешь.

 

Пробовали? Простым копипастом строки?

Share this post


Link to post
Share on other sites

Пробовали? Простым копипастом строки?

 

 

( 2346,9567,23456,1,14,1546 )

151 значение в скобках! и для каждой строчки на удаление. Вам не кажется, что это, как минимум, ресурсоемко?

Share this post


Link to post
Share on other sites

Все хотят волшебную кнопку "сделать как надо" :-D

 

Ей-богу, за это время бы уже вручную все удалили - быстрей бы вышло

Share this post


Link to post
Share on other sites

Все хотят волшебную кнопку "сделать как надо" :-D

 

Ей-богу, за это время бы уже вручную все удалили - быстрей бы вышло

Я сделаю сам то, что мне нужно. Просто интересны были взгляды со стороны. Или уже готовый велосипед кто на авито забыл выложить...

Время у меня пока на другие задачи уходит. Удаление не срочное. Но вручную не вариант, так как в следующий раз может быть уже 300 позиций, или тысяча...

Я уже написал для себя ТЗ и алгоритм этого решения. Как закончу с текущими задачами - займусь этой. Ничего сложного тут нет.

Share this post


Link to post
Share on other sites

151 значение в скобках! и для каждой строчки на удаление. Вам не кажется, что это, как минимум, ресурсоемко?

 

Как это для каждой строчки? Один оператор DELETE. Выше у него в IN 6 значений, у Вас будет 151, только и всего

Share this post


Link to post
Share on other sites

151 значение в скобках! и для каждой строчки на удаление. Вам не кажется, что это, как минимум, ресурсоемко?

что вы вкладываете в этот термин "ресурсоемко". интересно вы видели запросы, которые создают фильтры товаров на opencart? )

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Content

    • By valauto
      После попытки сделать бэкап базы данных на локалхосте выскакивает ошибка, подскажите пожалуйста как исправить: Uncaught Exception: Error: Unknown column 'sort_order' in 'order clause'<br />Error No: 1054<br />SELECT * FROM `oc_event` WHERE `trigger` LIKE 'catalog/%' AND status = '1' ORDER BY `sort_order` ASC in C:\xampp\htdocs\valauto\upload-3033-rs3\system\library\db\mysqli.php:40 Stack trace: #0 C:\xampp\htdocs\valauto\upload-3033-rs3\system\library\db.php(45): DB\MySQLi->query('SELECT * FROM `...') #1 C:\xampp\htdocs\valauto\upload-3033-rs3\catalog\model\setting\event.php(4): DB->query('SELECT * FROM `...') #2 C:\xampp\htdocs\valauto\upload-3033-rs3\system\storage\modification\system\engine\loader.php(248): ModelSettingEvent->getEvents() #3 C:\xampp\htdocs\valauto\upload-3033-rs3\system\engine\proxy.php(47): Loader->{closure}(Array, Array) #4 C:\xampp\htdocs\valauto\upload-3033-rs3\catalog\controller\startup\event.php(7): Proxy->__call('getEvents', Array) #5 C:\xampp\htdocs\valauto\upload-3033-rs3\system\storage\modification\system\engine\action.php(79): ControllerStartupEvent->index() #6 C:\xampp\htdocs\valauto\up in C:\xampp\htdocs\valauto\upload-3033-rs3\system\library\db\mysqli.php on line 40
    • By karmirarev
      Всем привет! Есть проблема, бьюсь уже второй день... Ситуация следующая:
      Сайт помер (не работает админка и фронт), пообщавшись с заказчиком решили что проще новый сайт пилить, так же на opencart'е как и было. Но перенося базу данных через mysql, полным бекапом, падает в ошибку.
      Собственно вопрос, как перенести базу(только товары), так чтоб это работало. В принципе в качестве ответа приму даже просто перечисление таблиц к переносу. Выручайте братцы.SOS.
    • By Devap
      Добрый день!
       
      Нуждаюсь в помощи профессионалов!
       
      Задача:
      Есть много не структурированных или плохо структурированных товаров которые требуется импортировать на сайт.
       
      План:
      1) Структурировать данные
      2) Залить товары на сайт
       
      Проблема заключается в том что с ocStore/openCart не работал, да и с PHP впринципе.
      Хорошо знаю .NET C#, но городить CMS на нем глупая затея, по крайней мере пока!
      Исходя из этого решил написать импорт модуль на ASP.NET Core (C#) - Серверная технология на C#  (= . 
       
      Вопрос состоит в том как правильно добавить товары сразу в MySql (в какие таблицы, что с чем свзязать по какому ключу, какие поля required и т.д...) что бы они корректно отобразились в магазине?

      Понимаю что ответ на вопрос будет довольно большой (если вообще будет =) ) по этому прошу хотя бы ссылки или направление в какую сторону смотреть.
       
      Спасибо!
       
      P.S.
       
      ocStore 3.0.2.0
       
    • By Allaur
      Добрый день
      ОС 2.1х
      После удаления товара на странице оформления заказа, товар в корзине остаётся висеть
       
       
       
      При перезагрузке страницы товар в корзине пропадает.
      Есть ли решение этой проблемы?
      Прошу помощи!
       
    • By MFSHOP
      Мне нужен хороший или отличный программист Opencart, со знанием Yii2. Цель - планомерный перенос нескольких сайтов с Yii2 на Opencart и дальнейшая их поддержка. Условия обсуждаются отдельно. Работа удалённая, оплата попроектная. Кому интересно, напишите мне в личку, пожалуйста.
       
      Требования, обязанности и условия прописаны ниже. Рассмотрю всех кандидатов. Указывайте цену за час работы, пожалуйста. Откликаться можно в телеграм @elizaveta_vasileva либо whatsapp/viber на номер 89821212982. Елизавета.
       
      Требуемый опыт работы: 1–3 года
      Полная занятость, удаленная работа
      Обязанности: Реализация утвержденной схемы взаимодействия систем
      "сайт cms - roistat - crm - 1c";
      Поддержка и разработка сайтов на OpenCart 2.3
      Перенос всех сайтов с Yii2 на единую платформу OpenCart 2.3
      Верстка контента
      Внедрение типовых модулей на сайт
      Доработка модулей, написание собственных по заказам службы маркетинга
      Обеспечение обмена данными сайта с другими системами (roistat, yandex, 1C)
      Разграничение прав пользователей, Обеспечение политики безопасности.
      Обучение пользователей возможностям системы.
      Установка обновлений программных компонентов
      Предоставление технической информации о размещенном контенте
      Визуализация рабочих схем, создание рабочих инструкций и регламентов
      Оптимизация расходов на ИТ
      Предложения по развитию ИТ для роста компании
      Требования: Высший уровень компетенции в области веб-программирования
      Понимание фреймворка Yii
      Знание фреймворка bootstrap Адаптивная верстка (HTML , CSS) по макетам (PSD) Базовый уровень работы с PHP включая ООП Умение разбираться и вносить изменения в существующий код (PHP, JS, CSS, HTML) Знание JavaScript Системы распределенного управления верcиями -GIT, базовый уровень с СУБД MySQL (приветствуется) Верстка под опенкарт 2.3 Умение работать с API (roistat, yandex, etc) Опыт работы в реальных проектах по поддержке сайтов на OpenCart, не менее 2-х лет
      Умение работать в команде и самостоятельно
      Орг. способности и умение координировать действия будут жирным плюсом
      Условия:
      Полностью "белая" заработная плата, официальное трудоустройство
      ЗП в зависимости от Ваших стартовых компетенций назначается индивидуально, от 40 до 60 т.р.
      Работа удалённо, из любой точки мира
      Просьба в отклике указывать уровень ЗП, на который рассчитываете.
  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.