В первой части мы разобрали массовое изменение цен и мета-тегов. Продолжаем тему — вот ещё несколько связок запросов, которые регулярно выручают при работе с Opencart. Структура таблиц снова взята из 2-й версии движка, названия и условия подправляйте под свою базу.
Напоминание из первой части остаётся в силе: перед любым массовым UPDATE или DELETE сделайте бэкап базы — через phpMyAdmin (вкладка «Экспорт») или mysqldump. Откатить ошибочный запрос без бэкапа не получится.
3. Массовое управление статусом и остатками товаров
Снять с продажи все товары с нулевым остатком:
UPDATE `oc_product` SET `status` = 0 WHERE `quantity` = 0;
Выставить одинаковый остаток всем товарам конкретного производителя (например, после ручной инвентаризации):
UPDATE `oc_product` SET `quantity` = 50 WHERE `manufacturer_id` = 54;
Увеличить вес товаров на 10% — пригодится, если поставщик пересчитал упаковку:
UPDATE `oc_product` SET `weight` = `weight` * 1.1 WHERE `manufacturer_id` = 54;
4. Массовый перенос товаров между категориями
Связь товаров и категорий хранится в отдельной таблице oc_product_to_category, так что тут работаем не с oc_product, а с ней.
Перенести все товары из одной категории в другую:
UPDATE `oc_product_to_category` SET `category_id` = 25 WHERE `category_id` = 18;
Полностью убрать товары из категории, не трогая сами товары:
DELETE FROM `oc_product_to_category` WHERE `category_id` = 18;
id категории смотрите в админке: Каталог — Категории — наведите курсор на «Изменить», номер будет в ссылке.
5. Замена текста внутри полного описания товара
В первой части мы меняли текст в мета-тегах, но название поставщика часто остаётся и в самом описании товара, а не только в SEO-полях:
UPDATE `oc_product_description` SET `description` = REPLACE(`description`, 'Название поставщика', 'Название вашего магазина');
Работает так же, как REPLACE для мета-тегов — ищет подстроку и меняет её везде, где встретит, включая HTML-разметку внутри описания. Перед запуском стоит проверить на паре товаров, что нужная фраза не встречается в другом контексте.
6. Массовая замена в ЧПУ (SEO-адресах)
В Opencart 2.x адреса страниц хранятся в таблице oc_url_alias (поле keyword). Если меняли название магазина или домен поставщика фигурирует прямо в ссылках:
UPDATE `oc_url_alias` SET `keyword` = REPLACE(`keyword`, 'staryi-postavshik', 'moy-magazin');
Учтите: если у вас Opencart 3 или 4, таблица и структура другие (oc_seo_url), запрос нужно адаптировать под неё.
7. Работа с клиентами и брошенными корзинами
Отписать всех клиентов от рассылки разом (например, после смены поставщика email-рассылок и необходимости получить согласие заново):
UPDATE `oc_customer` SET `newsletter` = 0;
Одобрить все аккаунты, если у вас включено подтверждение регистрации вручную и накопилась очередь:
UPDATE `oc_customer` SET `approved` = 1 WHERE `approved` = 0;
Удалить старые брошенные корзины (старше 30 дней), которые просто занимают место в базе:
DELETE FROM `oc_cart` WHERE `date_added` < NOW() - INTERVAL 30 DAY;
Это DELETE, а не UPDATE — особенно актуально сделать бэкап именно перед этим запросом.
Как и в первой части: запросы можно объединять в один файл, каждый с новой строки и точкой с запятой в конце, и запускать разом через Систему — Инструменты — Бэкап / Восстановление.
P.S. Названия полей вроде seo_title или seo_h1 из первой части — это не стандартная схема Opencart, а результат установленного SEO-модуля или модификации OcStore/LiveStore. В этой части я использовал только штатные поля движка, но если у вас стоят подобные расширения, названия могут отличаться — сверьтесь со структурой своей базы перед запуском.


