Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.11.03;
Скачать: CL | DM;

Вниз

снизить цену на определенный %   Найти похожие ветки 

 
Camaro   (2013-02-08 12:15) [0]

нужно написать SQL-запрос, который бы снижал текущую цену товара на определенный процент, задаваемый пользователем. Цена не может быть отрицательной, нужно учесть следующее: если в при снижении цены получается значение < 0, то цена должна стать 0. У меня получилось реализовать это 2-мя запросами:


UPDATE item SET price = price * (1 - :koeff / 100) WHERE id IN %s AND price * (1 - :koeff / 100) >= 0;

UPDATE item SET price = 0 WHERE id IN %s AND price * (1 - :koeff / 100) < 0;


Может можно сделать все как-то иначе, одним запросом?


 
Palladin ©   (2013-02-08 12:23) [1]

При чем тут делфи?


 
Inovet ©   (2013-02-08 13:43) [2]

> [0] Camaro   (08.02.13 12:15)
> 1 - :koeff / 100

Вот это почему бы сразу не вычислить и передать параметром.

> [0] Camaro   (08.02.13 12:15)
> WHERE id IN %s AND price * (1 - :koeff / 100) >= 0

Странный процент, однако. Он отрицательный может быть. Ну а вообще вот здесь

> [0] Camaro   (08.02.13 12:15)
> SET price =

и разрули это. Будет одним запросом. Но всё равно, что-то здесь не так.


 
Ega23 ©   (2013-02-08 13:51) [3]


>  Цена не может быть отрицательной, нужно учесть следующее:
>  если в при снижении цены получается значение < 0, то цена
> должна стать 0.


Как такое возможно при неотрицательной цене?


 
Inovet ©   (2013-02-08 14:04) [4]

> [3] Ega23 ©   (08.02.13 13:51)
> Как такое возможно при неотрицательной цене?

Ну, проценты такие. Например, снизить цену на 150%.:) Правда противоречит первому словию, ну ничего.


 
Плохиш ©   (2013-02-08 14:24) [5]


> UPDATE item SET price = price * (1 - :koeff / 100) WHERE
> id IN %s AND price * (1 - :koeff / 100) >= 0;

Вот это нафига?

> UPDATE item SET price = 0 WHERE id IN %s AND price * (1  - :koeff / 100) < 0;

А здесь надо просто отрицательные цены в 0 установить.

PS.
1. Оба запроса выполнить в одной транзакции.
2. Прочитать документацию к используемому серверу бд и сделать одним запросом.


 
turbouser ©   (2013-02-08 14:38) [6]

UPDATE item
SET    price = CASE
                   WHEN price * (1 - :koeff / 100) > 0 THEN price * (1 - :koeff / 100)
                   ELSE 0
              END
WHERE  id IN %s

странные отрицательные цены..



Страницы: 1 вся ветка

Текущий архив: 2013.11.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.006 c
2-1360143133
Dmitry1987
2013-02-06 13:32
2013.11.03
проектирование иерархии классов


15-1368704471
sniknik
2013-05-16 15:41
2013.11.03
Клиент не работает под wine (убунта) ...


8-1233235167
iworm
2009-01-29 16:19
2013.11.03
Line in


2-1360311329
Camaro
2013-02-08 12:15
2013.11.03
снизить цену на определенный %


15-1368909003
Юрий
2013-05-19 00:30
2013.11.03
С днем рождения ! 19 мая 2013 воскресенье