2012-07-31 77 views
1

我想要做的只是在某個值(將被動態加載)=某個值時才運行where子句。例如如果value ='x',Mysql運行where子句?

IF ('<=' == '$dynamic_value') THEN WHERE...

這可能嗎? ($動態值將是< =,或> =)

換句話說,我只想在某些值發生或調用時使用where子句。

回答

2

可以使用CASE表達WHERE子句中像這樣:

SELECT * 
FROM tbl 
WHERE 
    CASE '$dynamic_value' 
     WHEN '>=' THEN column_a >= column_b AND other_conditions 
     WHEN '<=' THEN column_a <= column_b AND other_conditions 
     ELSE 1 
    END 

如果$dynamic_value不等於或者>=<=,所述ELSE 1將由WHERE子句中使用代替 - 這基本上就像根本沒有WHERE條款(並返回所有記錄)。

因爲它看起來像你正在使用PHP和$dynamic_value值只能是>=<=,你可以插入參數直接想:

$sql = " 
    SELECT * 
    FROM tbl 
    WHERE column_a $dynamic_value column_b"; 

當然,如果從用戶輸入的到來,那麼一定要檢查$dynamic_value是否爲>=<=

0

您也可以達到類似的效果類似:

WHERE $dynamic_value <> '<=' OR <your-other-clause> 

這樣一來,除非$dynamic_value設置爲'<='<your-other-clause>位不會有任何效果。

1

而不是IF條件,這通常用WHERE中的布爾邏輯處理。將您的動態值與其相應的條件一起與AND匹配。

WHERE 
    ('$dynamic_value' = '<=' AND othercolumn = othercondition) 
    OR ('$dynamic_value' = '>=' AND othercolumn = someothercondition)