2013-05-14 65 views
-4

如何在一个sql语句之后使用if,else if?如果在一个sql语句中的某个地方使用了if if else

我想实现这样的使用PHP和MySQL:

//pseudocode 
$i = 3 
select count(id) from products where parent = $foo and type = (if $i = 2 then type = 1, else if i = 3 then type = 2 or 1, else if i = 10 then type = 3) 

我怎么可以做这样的事情?

+5

许多值,你已经研究['CASE'语法(HTTP://dev.mysql。 COM/DOC/refman/5.0/EN/case.html)? – Kermit 2013-05-14 13:32:15

+1

'type = 2或1' ...那该怎么办? – 2013-05-14 13:32:22

+1

@Jack:我假设'输入IN(2,1)' – 2013-05-14 13:33:06

回答

0

您需要使用IF作为一个函数:

select count(id) from products 
    where parent = foo and 
    type = if($i = 2, 1, 
     if($i = 3, 2, 
     if($i = 10, 3,4))); 
+0

如果OP将他们的代码移动到不同的平台会发生什么? – Kermit 2013-05-14 13:48:06

+0

这个地方接近我的想法,但如果我= 2然后检查1',如果我= 3然后检查2或1',如果我= 10然后检查3'。我试图这样做,并没有与你的陈述失败。以前从未做过这种事情。你能帮忙吗? – Norman 2013-05-14 14:13:18

+0

@Norman从整体问题来看,在这种情况下看起来更简单的逻辑结构会更好。类似于(i = 2和type = 1)或(i = 3并输入(2,1))或(i = 10和type = 3)' – 2013-05-14 14:32:45

1

使用CASE声明或类似的

WHERE OrderNumber LIKE 
    CASE WHEN IsNumeric(@OrderNumber) = 1 THEN 
    @OrderNumber 
    ELSE 
    '%' + @OrderNumber 
    END 

东西或者你可以使用IF语句一样@N. J. Reed

0

如果您'使用PHP,你可以设置你的type过滤器来构建查询

$i = 3 
$type = "0"; 
switch ($i) 
{ 
    case 2: 
    $type= "1"; 
    break; 
    case 3: 
    $type= "2, 1" 
    break; 
    case 10: 
    $type = "10"; 
    break; 
} 
$query = "select count(id) from products where parent = $foo and type IN (". $type .")" 

我使用IN关键字在本例,因为类型似乎能有万一$ I == 3