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

Удаление товаров c определённым количеством через SQL

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

Подскажите как массово удалить товары с количеством например "999" через SQL запрос ?

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


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

через один? врядли. нудо несколько. т.к. таблиц много. мало того, некоторые модули создают еще свои таблицы

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


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

просто парсер товаров тупил и наплодил по 2 дубля товаров, хорошо что указал количество 999 для отличия от остальных категорий

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


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

выведите товаров в админке по 500 или 1000 (делается в настройках, вкладка опции) и отсортируйте товар по кол-ву и удалите в ручную. как вариант. 

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


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

select product_id from oc oc_product where quantity = 10

{

delete * from oc_product where product_id = $query['product_id']
delete * from oc_product_description where product_id = $query['product_id']

....

}

Подставить php синтаксис.
И удалять в цикле в каждой нужной таблице.
Как-то так.

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


Ссылка на сообщение
Поделиться на другие сайты
5 минут назад, magneto2010 сказал:

выведите товаров в админке по 500 или 1000 (делается в настройках, вкладка опции) и отсортируйте товар по кол-ву и удалите в ручную. как вариант. 

6000 товаров как то не сильно охотно удалять ручками :)

 

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


Ссылка на сообщение
Поделиться на другие сайты
DELETE t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15 FROM oc_product AS t1
LEFT JOIN oc_product_attribute AS t2 ON(t1.product_id=t2.product_id)
LEFT JOIN oc_product_description AS t3 ON(t1.product_id=t3.product_id)
LEFT JOIN oc_product_discount AS t4 ON(t1.product_id=t4.product_id)
LEFT JOIN oc_product_image AS t5 ON(t1.product_id=t5.product_id)
LEFT JOIN oc_product_option AS t6 ON(t1.product_id=t6.product_id)
LEFT JOIN oc_product_option_value AS t7 ON(t1.product_id=t7.product_id)
LEFT JOIN oc_product_related AS t8 ON(t1.product_id=t8.product_id)
LEFT JOIN oc_product_reward AS t9 ON(t1.product_id=t9.product_id)
LEFT JOIN oc_product_special AS t10 ON(t1.product_id=t10.product_id)
LEFT JOIN oc_product_to_category AS t11 ON(t1.product_id=t11.product_id)
LEFT JOIN oc_product_to_download AS t12 ON(t1.product_id=t12.product_id)
LEFT JOIN oc_product_to_layout AS t13 ON(t1.product_id=t13.product_id)
LEFT JOIN oc_product_to_store AS t14 ON(t1.product_id=t14.product_id)
LEFT JOIN oc_review AS t15 ON(t1.product_id=t15.product_id)
WHERE t1.product_id
IN (SELECT product_id FROM (SELECT product_id FROM `oc_product` WHERE quantity = 999) x)

взято отсюда и поправлено под твои нужны  https://opencartforum.com/topic/119693-udalenie-dubley-po-tipu-tovar1tovar1-pomosch/

 

Только бекап сделай на всякий случай.

 

  • +1 2

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


Ссылка на сообщение
Поделиться на другие сайты
25 минут назад, Dozent сказал:

6000 товаров как то не сильно охотно удалять ручками :)

 

Может быть поможет
http://www.mysqltutorial.org/mysql-delete-join/
 

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


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

бекап, бекап, бекап

 

CREATE TABLE tmp_t CREATE SELECT product_id FROM oc_product WHERE quantity = 0;

DELETE FROM p FROM oc_product_attribute p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_description p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_discount p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM  oc_product_filter p 
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_image p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_option p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_option_value p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_related p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_reward p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_special p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_to_category p 
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_to_download p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_to_layout p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_product_to_store p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_review p
INNER JOIN tmp_t t on t.product_id = p.product_id;

DELETE FROM p FROM oc_url_alias p
INNER JOIN tmp_t t WHERE p.query = CAONCAT('product_id=',t.product_id);


DELETE FROM p FROM  oc_products p
INNER JOIN tmp_t t on t.product_id = p.product_id;

Если не ошибся при копипасте

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


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, chukcha сказал:

бекап, бекап, бекап

 

Если не ошибся при копипасте

Стейжинги рулят, конечно.
 

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


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, splka сказал:

Стейжинги рулят, конечно.

Чего вы сказали?

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


Ссылка на сообщение
Поделиться на другие сайты
24 минуты назад, chukcha сказал:

Чего вы сказали?

Перевожу - не продакшн, то что видно клиентам, а стейджинг - тестовая версия сайта.
т.е. всё делать надо с бекапами и в том, месте где это будет безболезненно.

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


Ссылка на сообщение
Поделиться на другие сайты
DELETE p1,
       p2,
       p3,
       p4,
       p5,
       p6,
       p7,
       p8,
       p9,
       p10,
       p11,
       p12,
       p13,
       p14,
       p15,
       p16
FROM `oc_product` p1
LEFT JOIN `oc_product_attribute` p2 ON (p2.product_id = p1.product_id)
LEFT JOIN `oc_product_description` p3 ON (p3.product_id = p1.product_id)
LEFT JOIN `oc_product_discount` p4 ON (p4.product_id = p1.product_id)
LEFT JOIN `oc_product_filter` p5 ON (p5.product_id = p1.product_id)
LEFT JOIN `oc_product_image` p6 ON (p6.product_id = p1.product_id)
LEFT JOIN `oc_product_option` p7 ON (p7.product_id = p1.product_id)
LEFT JOIN `oc_product_option_value` p8 ON (p8.product_id = p1.product_id)
LEFT JOIN `oc_product_recurring` p9 ON (p9.product_id = p1.product_id)
LEFT JOIN `oc_product_related` p10 ON (p10.product_id = p1.product_id)
LEFT JOIN `oc_product_reward` p11 ON (p11.product_id = p1.product_id)
LEFT JOIN `oc_product_special` p12 ON (p12.product_id = p1.product_id)
LEFT JOIN `oc_product_to_category` p13 ON (p13.product_id = p1.product_id)
LEFT JOIN `oc_product_to_download` p14 ON (p14.product_id = p1.product_id)
LEFT JOIN `oc_product_to_layout` p15 ON (p15.product_id = p1.product_id)
LEFT JOIN `oc_product_to_store` p16 ON (p16.product_id = p1.product_id)

WHERE p1.quantity = 999

 

  • +1 1

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


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

В аопе можно в инструментах выставить ваше количество и потом удалить эти товары

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


Ссылка на сообщение
Поделиться на другие сайты
4 часа назад, Dozent сказал:

6000 товаров как то не сильно охотно удалять ручками :)

 

 

6 страниц по 1000 или 12 по 500 лень? не отвечайте, вам скорее всего лень.

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


Ссылка на сообщение
Поделиться на другие сайты
18 часов назад, magneto2010 сказал:

 

6 страниц по 1000 или 12 по 500 лень? не отвечайте, вам скорее всего лень.

у меня в админке только 60

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


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

Не проще ли выбрать все товары с количеством 999 и прогнать через функцию productDelete или как там ее)

Один sql запрос и один цикл

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


Ссылка на сообщение
Поделиться на другие сайты
11 минут назад, Leingard сказал:

Один sql запрос и один цикл

Та вы шо?

Вы смотрели в админку?
 

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


Ссылка на сообщение
Поделиться на другие сайты
23 минуты назад, Leingard сказал:

Не проще ли выбрать все товары с количеством 999 и прогнать через функцию productDelete или как там ее)

Один sql запрос и один цикл

Всё правильно 

Даже в родную функцию delete передать не чекбоксы, а массив товаров у которых количество 999

С этим справится любой и будет кошернее чем эти адовые запросы 

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


Ссылка на сообщение
Поделиться на другие сайты
В 27.12.2018 в 19:22, magneto2010 сказал:

 

6 страниц по 1000 или 12 по 500 лень? не отвечайте, вам скорее всего лень.

 

 

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


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

мне когда ваще лень, я пишу в getProducts вызов deleteproduct

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

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

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