Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Recommended Posts

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

Необходимо удалить из базы группу товаров с определенными 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 )
Надіслати
Поділитися на інших сайтах


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

 

 

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

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

Надіслати
Поділитися на інших сайтах


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

 

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

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

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

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

Надіслати
Поділитися на інших сайтах


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

 

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

Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.