Перейти к содержанию
Helloween

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

Рекомендуемые сообщения

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

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

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

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

 

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

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

 

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 )

Цикл не нужен

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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 )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От YaroslavFrolov
      Доброго времени суток. Помогите плиз, нужно данные из корзины вставить в письмо заказа. Обработчик не от опенкарт.
    • От TerranXXX
      Необходимо модифицировать CMS ocStore v2.3 (русский OpenCart 2.1) для работы с MS SQL Server 2012+.

      Обязательные требования:
      1. Взаимодействие CMS с БД должно происходить исключительно через хранимые процедуры (доступа к таблицам у CMS не будет)
      2. Часть логики из php нужно перенести в хранимые процедуры (например динамическое формирование запросов)

      В ответе сообщите срок и стоимость данной работы.
    • От Bistore
      Добрый день помогите выбрать добить модуль личных количественных скидок на каждого пользователя отдельно в ограниченном виде!
      Получается
      1) Можно сравнить количество скидок на товар и количество купленных товаров пользователей(только авторизованные будут) сравнивая по айди товара и купленого товара минусовать количество скидок от купленного товара и выводить есть ли скидочный товар или же нет( или какое количество осталось).
       
      2) Я вывел sql  запросом уже в пользователе количество скидочных товаров минус количество купленного товара по айди ----- и теперь нужно по айди сравнить купленный товар и товар связать и по полю kolichestvo которое получилось в пользователе смотреть Kol=>0 ? или меньше и тд  
      Как лучше сделать?
      Как связать купленный товар(этим пользователем)  и товар на сайте?
      В файле который добавил в этот вопрос есть код корзины где осуществил все (jan - это количество скидок на товар) 
      cart.php
    • От 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  
    • От vseputen
      Модуль предназначен для удаления дублей товаров с одинаковым названием.
       
      Порядок установки:
      1. Распаковать архив в корень сайта.
      2. Перейти по ссылке site.ru/remover (site.ru заменить на свой сайт).
      3. Выбрать категорию в которой нужно удалить дубли товаров.
      4. И через несколько секунд (около 2-3 секунд) дубли удалятся.
      Фото работы:

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.