Перейти к содержанию
Miomy

[Помогите] Составить запрос в бд

Рекомендуемые сообщения

Пол дня мучаюсь, с базой совсем практически не умею работать!

Помогите плз составить запрос в БД, нужно поднять цены на 30% на товары, которые находятся в определенных категориях

 

В таблице product_to_category найти все product_id которым присвоен category_id 126, 128, 129, 131, 132, 160, 161
Я делал так: 
SELECT * from product_to_category where category_id in (126, 128, 129, 131, 132, 160, 161);
 
Вывелось 550 товаров, в таком виде:
 
INSERT INTO `product_to_category` (`product_id`, `category_id`, `main_category`) VALUES
(985, 131, 1),
(309, 126, 1),
(310, 126, 1),
....
 
вот на них мне нужно увеличить цену на 30%
 
Я так понимаю нужно:
все найденные product_id найти в таблице product_price, и если у этого product_id стоит currency_id = 3, то значение в колонке price нужно умножить на 1.3
 
Только как это соединить все в правильной запрос, я не знаю/
 
HELP!
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этого мало. В корзину уйдет старая цена.

Что вы хотите сделать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я хочу массово поднять цены на товары определенных категорий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


update product

set `price`=`price`*1.3

WHERE `product_id` in (

SELECT product_id 

FROM `product_to_category` 

WHERE category_id in (126, 128, 129, 131, 132, 160, 161)

)

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Про акции и скидки не забудьте

UPDATE oc_product p SET p.price = p.price+(p.price/100*30)
WHERE p.product_id IN (
SELECT p2c.product_id 
FROM oc_product_to_category p2c 
WHERE p2c.category_id in (126, 128, 129, 131, 132, 160, 161)
);

UPDATE oc_product_discount pd SET pd.price = pd.price+(pd.price/100*30)
WHERE pd.product_id IN (
SELECT p2c.product_id 
FROM oc_product_to_category p2c 
WHERE p2c.category_id in (126, 128, 129, 131, 132, 160, 161)
);

UPDATE oc_product_special ps SET ps.price = ps.price+(ps.price/100*30)
WHERE ps.product_id IN (
SELECT p2c.product_id 
FROM oc_product_to_category p2c 
WHERE p2c.category_id in (126, 128, 129, 131, 132, 160, 161)
); 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробовал сделать запрос, цена обновилась, но только рублевая, цена в евро осталась прежняя, а она основная, получается завтра магазин запросит новый курс и цена станет прежней. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Конечно.

Я вроде понял в чем дело, только как сделать опять же не знаю))

В запросе:

update product
set `price`=`price`*1.3
WHERE `product_id` in (
SELECT product_id 
FROM `product_to_category` 
WHERE category_id in (126, 128, 129, 131, 132, 160, 161)
)

цена умножается на 1.3 в таблице product, но там стоит цена в рублях, а у нас стоит модуль мультивалюты и цена в евро или долларах хранится в таблице product_price которая имеет вот такой вид:

INSERT INTO `product_price` (`product_id`, `currency_id`, `price`) VALUES
(684, 2, 0.0000),
(684, 3, 2.3100),
(685, 2, 0.0000),
(685, 3, 10.5600);

Вот в ней мне нужно умножить на 1.3 те product_id которые присвоены категориям 126, 128, 129, 131, 132, 160, 161.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы готовы самостоятельно написать запрос, иди будете ждать кто вам напищет

 

1. Получить список товаров в нужных категориях, вроде вы с этим спраивлись

2.  К этом запросу приявязать таблицу product

 

3 Написать запрос UPDATE таблицы товаров для замены (REPLACE) цены

 

Вот и пишите как это вы делаете, а не гадайте на кофейной гуще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

update product_price
set `price`=`price`*1.3
WHERE `product_id` in (
SELECT product_id
FROM `product_to_category`
WHERE category_id in (126, 128, 129, 131, 132, 160, 161)
)
  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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

update product_price
set `price`=`price`*1.3
WHERE `product_id` in (
SELECT product_id
FROM `product_to_category`
WHERE category_id in (126, 128, 129, 131, 132, 160, 161)
)

 

Т.е. у вас нет дополнительной таблицы?

 

А вы проверяли ваш запрос? Что апдейтится?

А что это за таблица product_price

 

Или будете руками отбирать id категорий

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

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

update product_price
set `price`=`price`*1.3
WHERE `product_id` in (
SELECT product_id
FROM `product_to_category`
WHERE category_id in (126, 128, 129, 131, 132, 160, 161)
)

Так и сделал, все получилось. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.