2013-12-12 18 views
1

我正在一個站點上工作,我需要根據動態值獲取記錄。我的表結構是這樣的:從DB獲取記錄時邏輯不清楚

Rule_price Rul_value

100  3 
    200  5 
    250  6 

我的問題是,如果我有100至200值,那麼就應該取100(第一條記錄,最少值),如果得到的值在200到250之間,那麼它應該讀取200等等。

該值將匹配Rule_price的值。如果不清楚問我。謝謝。

回答

1

解決方案是計算價格和所有價格之間的距離,對它們進行排序並選擇最小正距離。

像這樣:

SELECT rul_value, (rule_price - $price) as distance FROM my_table WHERE (rule_price - $price) < 0 ORDER BY distance DESC LIMIT 1 

注意:此查詢使用filesort,這意味着它可能是緩慢的,如果你有很多在這個表中的行。

+0

爲什麼你刪除了以前的查詢?該查詢工作,我改變一點點,我得到了我的解決方案。請發佈,以便我可以接受它..只改變ASC到DESC –

+0

不,以前的查詢將無法在所有情況下工作。新的更好。 – Yousf

+0

我沒有選擇這個查詢?爲什麼你使用251 –

0

上面的答案(Yousaf)查詢獲取記錄,但當值等於字段值時失敗:如果發現值爲200,則獲取100的記錄。對於200,它必須獲取200而不是100。查詢一點點,運作良好。所以在將來可能會有所幫助。

SELECT rul_value, (rule_price - $price) as target 
FROM my_table WHERE (rule_price - $price) <= 0 ORDER BY target DESC limit 1