Главная страница
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.007 c
2-1360068267
vlad
2013-02-05 16:44
2013.11.03
Bass.dll


15-1368995402
Юрий
2013-05-20 00:30
2013.11.03
С днем рождения ! 20 мая 2013 понедельник


15-1368541324
Es
2013-05-14 18:22
2013.11.03
Падение приложения, crash без визуализации


15-1367900957
O'ShinW
2013-05-07 08:29
2013.11.03
С днем Радио!


15-1368647469
Rouse_
2013-05-15 23:51
2013.11.03
ВУЗ для IT специалиста: взгляд изнутри