Добавить всем товарам в opencart дополнительную категорию через sql запрос

как присвоить всем товарам дополнительную категорию category_id = 372

пробую sql запрос и получаю ошибку duplicate entry for key

INSERT INTO oc_product_to_category (product_id, category_id, main_category) SELECT product_id, '372', '0' FROM oc_product;

в запросе нужно взять id всех товаров из таблицы oc_product и добавить их в таблицу oc_product_to_category при этом в других колонках проставить категорию в которой будет товар и 0 так как товар добавляется не в главную категорию

  • Возможная причина ошибки что в этой таблице по 3-4 колонки с одинаковыми id так как у каждого товара присвоено несколько категорий Таблица oc_product_to_category

Ответы (1 шт):

Автор решения: Kirill

Я писал в комменте, у таблицы product_to_category первичный ключ составной - product_id-category_id. Duplicate entry '50-372' for key 'PRIMARY' - в таблице есть запись, где product_id=50 и category_id=372.

Если вы точно знаете, что ранее товаров у категории 372 ранее не было (или категории не было), то запись появилась в результате более ранних попыток добавить записи в таблицу. В таком случае найдите запись, где product_id=50 и category_id=372, удалите пробуйте вставку по новой. Но на всякий случай проверьте, может все необходимые записи уже внесены, это объяснит повторное появление данной ошибки (если таковое будет), но с другими парами product_id-category_id. Можно также использовать ON DUPLICATE KEY UPDATE

insert into yourschema.oc_product_to_category (product_id, category_id)
    select p.product_id, 372, 0 from yourschema.oc_product p
    on duplicate key update yourschema.oc_product_to_category.product_id = p.product_id, yourschema.oc_product_to_category.category_id;

В результате найденные дубликаты будут перезаписываться и Duplicate entry не возникнет.

→ Ссылка