2013-05-14 26 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