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 fduw
      Как подключить mysql через unix socket?
      В инете не нашел рабочей инфы
       
      Стандартная конфа

       Так не работает
      define('DB_HOSTNAME', 'unix:/tmp/mysql.sock'); define('DB_HOSTNAME', 'localhost/tmp/mysql.sock'); define('DB_HOSTNAME', 'tmp/mysql.sock');  
    • By perebor
      Ребят привет, нужна помощь, прошу не пинаться) я пока не силен в оптимизации БД, но очень интересно было бы разобраться самому.
      На сервере где-то раз в месяц происходят скачки по нагрузке и кол-ву запросов. Последний был 27 числа, админка при этом пару раз отдавала 503 ошибку. Хостинг шлет предупреждения.
      Есть лог запросов, но все, что пока понимаю, так это то, что основную нагрузку подбрасывают запросы из мегафильтра. Собственно вопрос в том, что бы понять что это за запросы и как это дело оптимизировать, или может вообще стоит хостинг сменить. Буду благодарен если направите в правильное русло)

      сайт: nice-office.ru
      хостинг: ihc.ru
      Slow log:
       
       

    • By LIAL
      500.00 руб
      Скачать/Купить дополнение


      Очистка кеша для OC 2.x
      Очистка кеша для OC 2.x (Cache cleaner for OC 2.x)
      Модуль разработан для очистки всех видов кеша в Опенкарт 2.x Очищает Системный кеш, Кеш картинок, Ocmod и Vqmod кэш и mods.cache.
      Сканирует директории рекурсивно, удаляя в них файлы, а затем если директория пустая удаляет ее саму. Также есть возможность очистка Ocmod лога.
      НЕ удаляет файлы вида: index.*, .gitignore, .hgignore и .htaccess
      Перевод: English, Русский
      Работа модуля была протестирована в Опенкарт версии 2.0.3.1, 2.1.0.1, 2.3.0.2 но полагаю будет работать и с более ранними или поздними версиями. Если вы нашли какие либо ошибки или баг, свяжитесь с нами и мы сразу исправим их.
      Инструкция по установке:
      OCMOD: В разделе Дополнения -> Установка дополнений, загрузите скачанный файл
      Перейдите в Система -> Пользователи -> Группы пользователей - и дайте права на изменение для модуля cache/cleaner.
      Обновите кеш модификаций
      Модуль доступен в меню Инструменты -> Очистка кэша

      Если вы не видите в меню пункта Система -> Инструменты -> Очистка кэша, очистите кэш вашего бразера, дайте права на доступ пользователю к cache/cleaner и обновите кэш модификаций.
      Добавил LIAL Добавлено 05.11.2015 Категория Кэширование, сжатие, ускорение Системные требования Сайт разработчика https://instup.com Старая цена Метод активации Ioncube Loader OpenCart ocStore OpenCart.Pro, ocShop Обращение к серверу разработчика  
    • By vseputen
      300.00 руб
      Скачать/Купить дополнение


      Удаление дублей товаров (OC2.* и 3.*)
       
      Модуль предназначен для удаления дублей товаров с одинаковым названием.
       
      Порядок установки:
      1. Распаковать архив в корень сайта.
      2. Перейти по ссылке site.ru/remover (site.ru заменить на свой сайт).
      3. Выбрать категорию в которой нужно удалить дубли товаров.
      4. И через несколько секунд (около 2-3 секунд) дубли удалятся.
      Фото работы:

      Добавил vseputen Добавлено 12.10.2015 Категория Обмен данными Системные требования Сайт разработчика Старая цена 300 Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Обращение к серверу разработчика  
    • By LIAL
      Скачать/Купить дополнение


      Очистка кэша для OC 1.5.6.x
      Очистка кэша для Opencart 1.5.6.x
      Локализация: Русский, Английский
      Очистка кеша: Системный, Vqmod, mods.cache, кэш изображений.
      Директории проходит рекурсивно, удаляя затем пустые.
      НЕ удаляет файлы: index.*, .gitignore, .htaccess, .hgignore
      Для установки скопируйте корень папки upload в корень сайта, далее в панели администратора дайте права для доступа и изменения к модулю cache/cleaner.
      Очистка кэша находится в меню Администратора -> Система -> Очистка кэша
      Добавил LIAL Добавлено 11.09.2015 Категория Кэширование, сжатие, ускорение  
  • 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.