Форум: "Начинающим";
Текущий архив: 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