Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2013.11.03;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.003 c
15-1368891373
Разведка
2013-05-18 19:36
2013.11.03
Помогите устроится программистом


3-1293438440
avers_sm
2010-12-27 11:27
2013.11.03
Как передать TIBTransaction в качестве параметра процедуры.


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


15-1366275194
Cobalt
2013-04-18 12:53
2013.11.03
браузеры на Андроиде


1-1317722383
vlk32
2011-10-04 13:59
2013.11.03
Неправильно вычисляется лог.выражение





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский