MySQL IF ELSEIF在select查询中

时间:2012-12-14 23:21:19

标签: mysql if-statement

我试图根据用户选择的数量选择不同的产品价格。 这是我正在处理的查询(它有语法错误):

 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;

5 个答案:

答案 0 :(得分:153)

您拥有在存储过程like this中使用的内容以供参考,但它们并不打算像您现在一样使用。您可以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 ..

答案 1 :(得分:15)

MySQL中的

IF()是一个三元函数,而不是控制结构 - 如果第一个参数中的条件为真,则返回第二个参数;否则,它返回第三个参数。没有相应的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)
    )
  )
)

这些条件对我来说都没有意义(看起来有些情况可能会被无意中逆转?),但不知道你究竟想要完成什么,我很难解决这个问题。

答案 2 :(得分:6)

我在使用嵌套的if()函数时发现了MySQL 5.1.72中的一个错误....列变量(例如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

答案 3 :(得分:3)

对于你的问题:

<script>
 $(document).ready(function(){

        $('button').click(function () {
            $('<input type="button id="submit_button" >').insertBefore(this);
            $(this).remove();
         });
 });
</script>

您可以在MySQL中使用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函数。

参考:
http://easysolutionweb.com/sql-pl-sql/how-to-use-if-and-else-in-mysql/

答案 4 :(得分:2)

根据Nawfal的回答,IF语句需要在程序中。我发现这篇文章展示了在开发和测试过程中使用脚本的一个很好的例子。基本上,你创建,调用然后删除程序:

https://gist.github.com/jeremyjarrell/6083251