Подтвердить что ты не робот

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;
4b9b3361

Ответ 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