2016-08-11 41 views
0

我有如下表:如何編寫多條件的MySQL語句?

id    (integer, primary key) 
amount_low  (integer) 
amount_high  (integer) 
fixedprice  (decimal 4,2 Null) 
percentadjust (decimal 4,2 Null) 
itemname  (varchar 50) 

的記錄將在無論是「fixedprice」或「percentadjust」字段中的值,但不能同時使用。一個將是NULL,另一個將有一個值。

我需要基於單個輸入量得到記錄,「X」:

如果「fixedprice」字段的值,我需要得到記錄,如果X是> =(fixedprice * amount_low) AND X是< =(fixedprice * amount_high)。如果「percentadjust」字段有一個值,那麼如果X> =((((percentadjust/100)+ 1)* 3.5)* amount_low),則需要獲取記錄,並且X爲< =((( (percentadjust/100)+ 1)* 3.5)* amount_high)。

「3.5」是有時會發生變化的值,我不太在意那部分。

什麼是在MySQL中這樣做的好方法?

的樣本數據:(另見http://sqlfiddle.com/#!9/922a0

id amount_low amount_high fixedprice percentadjust itemname 
----------------------------------------------------------------- 
1 20   25   2.25  NULL   A 
2 50   75   2.38  NULL   B 
3 23   32   NULL  9.75   C 
4 14   22   NULL  9.12   D 
5 96   112   2.58  NULL   E 
+1

if(x1不爲null,x2爲null)或(x1爲null且x2不爲null) – Drew

+0

@Drew我有點新手。你能爲此顯示MySQL語句嗎? –

+0

當然。你可以創建一個sqlfiddle來創建和加載數據。我會測試它(或別人會) – Drew

回答

0

假設你的X被輸入爲111這將是

select * from tblItems 
where (fixedprice is not null and 111>=(fixedprice * amount_low) and 111 <= (fixedprice * amount_high)) 
OR (percentadjust is not null and 111>=((((percentadjust/100) + 1) * 3.5) * amount_low) AND 111<=((((percentadjust/100) + 1) * 3.5) * amount_high)) 

注意你總是可以把它寫成where xyz between A and B稍微簡化出頭。

請記住,當使用AND和OR時,可能會浪費很多時間來調試邏輯運算符,並且不使用帶圓括號的安全包裝。所以,如果你和OR混合在一起,把事情做好。

+0

非常感謝!我在我的系統上試了一下,效果很好。你一直在幫助很大!我也會使用BETWEEN。 –