MySQL IF ELSEIF в выбранном запросе
Я пытаюсь выбрать разные цены продукта на основе количества, которое пользователь выбирает.
Это запрос, над которым я работаю (имеет синтаксическую ошибку):
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;
Ответы
Ответ 1
У вас есть то, что вы использовали в хранимых процедурах как это для справки, но они не предназначены для использования так, как вы сейчас. Вы можете использовать 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
.
Ответ 2
IF()
в MySQL есть тройная функция, а не структура управления - если условие в первом аргументе истинно, оно возвращает второй аргумент; в противном случае он возвращает третий аргумент. Не существует соответствующей функции ELSEIF()
или END IF
.
Ближайшим эквивалентом того, что у вас есть, будет что-то вроде:
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_3, price_4, 1)
)
)
)
Условия не все имеют для меня смысл (похоже, некоторые из них могут быть непреднамеренно отменены?), но, не зная, что именно вы пытаетесь выполнить, мне трудно это исправить.
Ответ 3
Я обнаружил ошибку в MySQL 5.1.72 при использовании вложенных функций if().... значение переменных столбца (например, qty_1) пусто во втором, если(), что делает его бесполезным. Вместо этого используйте следующую конструкцию:
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
Ответ 4
По вашему вопросу:
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/
Ответ 5
В соответствии с ответом Nawfal утверждения IF должны быть в процедуре. Я нашел этот пост, который показывает блестящий пример использования script в процедуре, пока он все еще разрабатывается и тестируется. В принципе, вы создаете, вызываете, затем отбрасываете процедуру:
https://gist.github.com/jeremyjarrell/6083251