Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

снизить цену на определенный %


Camaro ©   (2013-02-08 12:15:00) 

нужно написать 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;


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


turbouser   (2013-02-08 14:38:00) [1]

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

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


Плохиш   (2013-02-08 14:24:00) [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;

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

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


Inovet   (2013-02-08 14:04:00) [3]

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

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


Ega23   (2013-02-08 13:51:00) [4]


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


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


Inovet   (2013-02-08 13:43:00) [5]

> [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 =

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


Palladin   (2013-02-08 12:23:00) [6]

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо