Массовое обновление товарной категории (добавление категории «главная» ко всем товарам) - Prestashop 1.6.0.6

Я заметил, что количество всех продуктов не равно количеству продуктов в категории home. Это связано с тем, что эта самая большая родительская категория не всегда выбиралась при добавлении продукта. Таким образом, некоторые продукты принадлежат home, а другие нет.

Хотя мне нужно отобразить правильное количество продуктов для страницы категории home, я искал в базе данных столбцы, содержащие категории, но не нашел их в ps_product или ps_product_lang.

в чем заключается идея sql-запроса, который может массово изменять соответствующие поля в базе данных, чтобы все мои продукты принадлежали к категории home.

Ваша обычная помощь приветствуется. Спасибо.

Изменить: я обнаружил, что таблица в базе данных ps_category_product. Он единственный?

эта таблица выглядит так:

+-------------+------------+----------+
| id_category | id_product | position |
+-------------+------------+----------+
|          11 |          1 |        1 |
|          11 |          2 |        2 |
|          11 |         10 |        3 |
+-------------+------------+----------+

Возможно, мне нужно создать x строк (x = количество продуктов). каждая строка имеет id_category = 1, id_product = идентификатор продукта и position = position ++. Это лучший подход?

Любая помощь относительно того, как реализовать его в sql?

Еще раз спасибо.


person Adib Aroui    schedule 24.06.2014    source источник


Ответы (1)


Вы можете отнести каждый продукт к категории Home с помощью простого SQL-запроса:

INSERT IGNORE INTO ps_category_product SELECT 2, id_product, 0 FROM ps_product

2 - это обычно id_category значение категории Home, 0 - это position.

Если вам нужны уникальные position значения, вам понадобится более сложный запрос:

INSERT IGNORE INTO ps_category_product SELECT 2, id_product, ((SELECT MAX(position) FROM ps_category_product WHERE id_category = 2) + (@inc := @inc + 1)) FROM ps_product INNER JOIN (SELECT @inc := 0) AS i
person yenshirak    schedule 24.06.2014
comment
Уау, одна строка команд !!! SQL и йенширак великолепны. Пока не тестировал. Я только чувствую, что это сработает (даже если я действительно не понимаю 2 и 0 в запросе). МНОГИЕ Спасибо, чувак. - person Adib Aroui; 25.06.2014
comment
Когда я делаю SELECT 2 , id_product, 0 FROM 'ps_product', я получаю три столбца: первый из них имеет значение 2. последний - 0. Нужно ли мне изменять значения? А как насчет позиции коломуна? Разве он не должен содержать инкрементные значения? - person Adib Aroui; 25.06.2014
comment
Это работает для меня, но все равно все значения позиций теперь равны 0 для продуктов домашней категории - person Adib Aroui; 25.06.2014
comment
@whitelettersandblankspaces 2 - это идентификатор Home категории, 0 - позиция. Наличие 0 для всех позиций не проблема, но если вам нужны уникальные позиции, вам понадобится более сложный запрос: INSERT IGNORE INTO ps_category_product SELECT 2, id_product, ((SELECT MAX(position) FROM ps_category_product WHERE id_category = 2) + (@inc := @inc + 1)) FROM ps_product INNER JOIN (SELECT @inc := 0) AS i. Чтобы это сработало, вам нужно удалить ранее вставленные строки. - person yenshirak; 25.06.2014
comment
Но у меня есть категория Home с 1 в качестве идентификатора (PS 1.6.0.6). 2 дает 404. Вот почему я отредактировал ответ. Это будет более подробно, если вы добавите N.B, указывающее, что 2 иногда является идентификатором Home. Во-вторых, большое спасибо за научные знания, которые я изучил, опираясь на ваши два умных запроса (уникальное положение может быть полезно в будущем). - person Adib Aroui; 25.06.2014
comment
@whitelettersandblankspaces Вы уверены, что id_category из Home 1 для вас? Я сделал новую установку прямо сейчас, и Root это 1, Home это 2. - person yenshirak; 26.06.2014
comment
Свежая установка в этом случае ничего не скажет. Посмотрите на stackoverflow.com/questions / 24023989 /, редакция OP точно описывает мою ситуацию. Спасибо за уделенное время. - person Adib Aroui; 26.06.2014