Я пытаюсь выбрать разные цены на продукт в зависимости от количества, которое выбирает пользователь. Это запрос, над которым я работаю (с синтаксической ошибкой):
select id,
(SELECT
IF(qty_1<='23',price,1)
ELSEIF(('23'>qty_1 && qty_2<='23'),price_2,1)
ELSEIF(('23'>qty_2 && qty_3<='23'),price_3,1)
ELSEIF('23'>qty_3,price_4,1)
END IF) as total
from product;
mysql
if-statement
Иван Браво Карлос
источник
источник
Ответы:
У вас есть то, что вы использовали в подобных хранимых процедурах для справки, но они не предназначены для использования так, как сейчас. Вы можете использовать,
IF
как показаноduskwuff
. НоCase
заявление лучше для глаз. Как это:select id, ( CASE WHEN qty_1 <= '23' THEN price WHEN '23' > qty_1 && qty_2 <= '23' THEN price_2 WHEN '23' > qty_2 && qty_3 <= '23' THEN price_3 WHEN '23' > qty_3 THEN price_4 ELSE 1 END) AS total from product;
Это выглядит чище. Я полагаю, вам все равно не нужно внутреннее
SELECT
..источник
IF()
в MySQL - это тернарная функция, а не структура управления - если условие в первом аргументе истинно, оно возвращает второй аргумент; в противном случае возвращается третий аргумент. Нет соответствующейELSEIF()
функции илиEND IF
ключевого слова.Ближайший эквивалент того, что у вас есть, будет примерно таким:
Не все условия имеют для меня смысл (похоже, что некоторые из них могут быть случайно отменены?), Но, не зная, чего именно вы пытаетесь достичь, мне трудно это исправить.
источник
case when (condition) then {computed value} when then else end
Я обнаружил ошибку в MySQL 5.1.72 при использовании вложенных функций if () .... значение переменных столбца (например, qty_1) пусто внутри второго if (), что делает его бесполезным. Вместо этого используйте следующую конструкцию:
case when qty_1<='23' then price when '23'>qty_1 && qty_2<='23' then price_2 when '23'>qty_2 && qty_3<='23' then price_3 when '23'>qty_3 then price_4 else 1 end
источник
На ваш вопрос:
SELECT id, IF(qty_1 <= '23', price, IF(('23' > qty_1 && qty_2 <= '23'), price_2, IF(('23' > qty_2 && qty_3 <= '23'), price_3, IF(('23' > qty_2 && qty_3<='23'), price_3, IF('23' > qty_3, price_4, 1))))) as total FROM product;
Вы можете использовать
if - else
структуру управления илиIF
функцию в MySQL.Ссылка:
http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/
источник
Согласно ответу Nawfal, операторы IF должны быть в процедуре. Я нашел этот пост, в котором показан блестящий пример использования вашего скрипта в процедуре, которая все еще разрабатывается и тестируется. По сути, вы создаете, вызываете, а затем отбрасываете процедуру:
https://gist.github.com/jeremyjarrell/6083251
источник