Как массово SQL-запросом добавить 10 грн к товарам в 25 категориях

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

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 7 месяцев
Откуда: Харьков

Сообщение #1 dimon » 06.02.2019, 09:53

Здравствуйте!
Сайт на Окей 1.2.4.
Как массово SQL-запросом добавить 10 грн ко всем товарам в определенных 25 категориях?
(в каждом товаре 3 варианта)

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

Сообщение #2 makki » 06.02.2019, 12:02

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

UPDATE s_variants AS v SET v.price = v.price + 10 WHERE
v.product_id in(SELECT pc.product_id FROM s_products_categories AS pc WHERE pc.category_id in(40,50))


40 и 50 - это id категорий
Последний раз редактировалось makki 06.02.2019, 12:21, всего редактировалось 2 раза.
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

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

Сообщение #3 korshunov » 06.02.2019, 12:12

makki писал(а):

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

UPDATE s_variants AS v SET v.price = v.price + 10 WHERE
v.product_id in(SELECT pc.product_id FROM s_products_categories AS pc WHERE pc.category_id in(array(40,50))


40 и 50 - это id категорий

1. Префикс названий таблиц s_ в актуальных версиях давно уже другой,
2. array(40,50) - дает ошибку,
3. Со скобками непорядок - еще одна ошибка.

У меня работает так
UPDATE ok_variants AS v SET v.price = v.price + 10 WHERE v.product_id in(SELECT pc.product_id FROM ok_products_categories AS pc WHERE pc.category_id in(40,50));

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

Сообщение #4 makki » 06.02.2019, 12:20

korshunov писал(а):1. Префикс названий таблиц s_ в актуальных версиях давно уже другой,
2. array(40,50) - дает ошибку,
3. Со скобками непорядок - еще одна ошибка.

У меня работает так
UPDATE ok_variants AS v SET v.price = v.price + 10 WHERE v.product_id in(SELECT pc.product_id FROM ok_products_categories AS pc WHERE pc.category_id in(40,50));
Знал что вы первыми ответите ))
Написано
Сайт на Окей 1.2.4.
У этой версии префикс s_
Ошибки исправил. Спасибо
Cоздание и расширение функционала интернет-магазина на платформе OkayCMS 2 (с 3-й и 4-й версией не работаю)

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 7 месяцев
Откуда: Харьков

Сообщение #5 dimon » 06.02.2019, 13:28

Спасибо, все получилось, цены поменялись.

dimon M
dimon M
Репутация: 1
Сообщения: 86
Зарегистрирован: 16.08.2017
С нами: 6 лет 7 месяцев
Откуда: Харьков

Сообщение #6 dimon » 06.05.2019, 08:57

Как массово SQL-запросом добавить 20% ко всем товарам в определенных 5 категориях?

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

Сообщение #7 korshunov » 06.05.2019, 09:58

UPDATE ok_variants AS v SET v.price = v.price * 1.2 WHERE v.product_id in(SELECT pc.product_id FROM ok_products_categories AS pc WHERE pc.category_id in(40,50,60,70,80));

Для версии 1 использовать s_variants.

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #8 zyxer » 10.05.2019, 13:19

korshunov писал(а):UPDATE ok_variants AS v SET v.price = v.price * 1.2 WHERE v.product_id in(SELECT pc.product_id FROM ok_products_categories AS pc WHERE pc.category_id in(40,50,60,70,80));

Для версии 1 использовать s_variants.
только в данном запросе один недочет.
Не понятно (не опытному человеку) как определить эти ID категорий (если мы обновляем главные категории, а товар где-то в подкатегориях).

korshunov писал(а):
makki писал(а):

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

UPDATE s_variants AS v SET v.price = v.price + 10 WHERE
v.product_id in(SELECT pc.product_id FROM s_products_categories AS pc WHERE pc.category_id in(array(40,50))


40 и 50 - это id категорий

1. Префикс названий таблиц s_ в актуальных версиях давно уже другой,
2. array(40,50) - дает ошибку,
3. Со скобками непорядок - еще одна ошибка.

У меня работает так
UPDATE ok_variants AS v SET v.price = v.price + 10 WHERE v.product_id in(SELECT pc.product_id FROM ok_products_categories AS pc WHERE pc.category_id in(40,50));
Здесь есть ошибочка с ценами, нужно было добавить 10 грн, а добавили 10 не пойми чего (мультивалюты), и недочет выше.

Я так понимаю спрашивающего это устроило, но кто в будущем сюда попадет, чтобы понимал что нужно учитывать еще и валюты...
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS

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

Сообщение #9 korshunov » 10.05.2019, 14:17

zyxer писал(а): Здесь есть ошибочка с ценами, нужно было добавить 10 грн, а добавили 10 не пойми чего (мультивалюты), и недочет выше.

Если в запросе в конце приписать AND v.currency_id=2, то будет добавление только по товарам, у которых цены заданы в одной валюте. Если надо, по прочим валютам аналогичные запросы делать...

zyxer M
zyxer M
Возраст: 32
Репутация: 77
Сообщения: 419
Зарегистрирован: 03.02.2016
С нами: 8 лет 1 месяц
Откуда: Днепр

Сообщение #10 zyxer » 10.05.2019, 14:33

да, так будет пользователям счастье ))
Всё сказанное мной, является лично моим мнением, и не является официальной позицией OkayCMS


Название раздела: Полезные решения для OkayCMS
Правила раздела: faq.php?mode=okay

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


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

   

Вернуться в «Полезные решения для OkayCMS»

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

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