SQL запрос для категорий товаров

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

Евгений M
Евгений M
Возраст: 37
Репутация: 4
Сообщения: 86
Зарегистрирован: 15.12.2018
С нами: 5 лет 3 месяца
Откуда: Киев

Сообщение #1 Евгений » 30.08.2021, 10:38

V 2.3.5
Добрый день, форумчане!
Подскажите как с помощью SQL запроса удалить принадлежность товаров к материнаским категориям в карточках товара, оставив лишь подкатегории нижнего уровня. Например товар находится в категории Электроника -> Компьютеры и ноутбуки -> Ноутбуки и соответственно в карточке товара в разделе категория выбраны все категории вложенности. Необходимо, чтобы после запроса товар относился лишь к категории Ноутбуки

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #2 makki » 30.08.2021, 19:38

Код: Выделить всё

UPDATE ok_products_categories pc
LEFT JOIN ok_categories c ON pc.category_id = c.id
SET c.parent_id = 0


Перед выполнением запроса на всякий случай сделайте бэкап базы данных
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #3 korshunov » 31.08.2021, 05:07

makki писал(а):

Код: Выделить всё

UPDATE ok_products_categories pc
LEFT JOIN ok_categories c ON pc.category_id = c.id
SET c.parent_id = 0

Весьма странный способ. Реально просто уничтожит структуру дерева категорий, переведя каждую категорию (в которой есть товары) в верхний уровень.

А вообще желание ТС выглядит весьма туманно и противоречиво...

makki M
makki M
Репутация: 199
Сообщения: 697
Зарегистрирован: 12.08.2016
С нами: 7 лет 7 месяцев
Откуда: Киев
Сайт

Сообщение #4 makki » 31.08.2021, 05:54

korshunov писал(а):Реально просто уничтожит структуру дерева категорий, переведя каждую категорию (в которой есть товары) в верхний уровень.
А разве не в этом была задача?
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #5 korshunov » 31.08.2021, 06:43

В том и дело, что с задачей ТС намудрил.
С одной стороны, "удалить принадлежность товаров к материнаским категориям".
С другой, "Необходимо, чтобы после запроса товар относился лишь к категории Ноутбуки".

А запрос Ваш вообще НЕ ЗАТРАГИВАЕТ принадлежность товаров к категориям, а только меняет структуру дерева категорий...

ооо
ооо

Сообщение #6 ооо » 16.09.2021, 08:15

Думаю там вопрос даже не к базе, а к хлебным крошкам. Т.к. человек добавил товар в категорию Ноутбуки (третьего уровня), а в хлебный крошках она выводится как Электроника -> Компьютеры и ноутбуки -> Ноутбуки. + этот товар выводится в категориях Электроника и Электроника -> Компьютеры и ноутбуки , чего возможно не нужно. В любом случае прошу уточнить более детально что именно нужно

Евгений M
Евгений M
Возраст: 37
Репутация: 4
Сообщения: 86
Зарегистрирован: 15.12.2018
С нами: 5 лет 3 месяца
Откуда: Киев

Сообщение #7 Евгений » 14.10.2021, 15:11

Попробую уточнить.
Изначально на сайте при добавлении нового товара в админке указывалась не одна категория (последней вложенности, например Водонагреватели), а все что входят в структуру дерева (Техника для дома -> Водонагреватели)
Пример из админки демо версии сайта:
1.jpg

Сейчас необходимо, чтобы в карточке товара было отмечено лишь Водонагреватели
При импорте данных с помощью CSV файла изменения в категориях не происходят.
На сайте используется шаблонное описание товаров с помощью SEO товаров, но если в карточке товара указаны несколько категорий вложенности, то описание подтягивается от материнской категории. Если же товары будут относиться к категориям последней вложенности, то появляется возможность более гибко настроить описания.

korshunov
korshunov
Репутация: 146
Сообщения: 1854
Зарегистрирован: 03.12.2015
С нами: 8 лет 3 месяца
Skype

Сообщение #8 korshunov » 14.10.2021, 16:32

Примерно так:
DELETE FROM ok_products_categories pc WHERE category_id IN ( select dictinct parent_id from ok_categories)
И после этого надо как-то корректировать поле main_category_id. И возможны ошибки в данных, когда у товара вообще не будет задано категории...

Надежнее сразу писать обработку на PHP со всеми проверками.


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 21 гость