我正在一個站點上工作,我需要根據動態值獲取記錄。我的表結構是這樣的:從DB獲取記錄時邏輯不清楚
Rule_price Rul_value
100 3 200 5 250 6
我的問題是,如果我有100至200值,那麼就應該取100(第一條記錄,最少值),如果得到的值在200到250之間,那麼它應該讀取200等等。
該值將匹配Rule_price
的值。如果不清楚問我。謝謝。
我正在一個站點上工作,我需要根據動態值獲取記錄。我的表結構是這樣的:從DB獲取記錄時邏輯不清楚
Rule_price Rul_value
100 3 200 5 250 6
我的問題是,如果我有100至200值,那麼就應該取100(第一條記錄,最少值),如果得到的值在200到250之間,那麼它應該讀取200等等。
該值將匹配Rule_price
的值。如果不清楚問我。謝謝。
解決方案是計算價格和所有價格之間的距離,對它們進行排序並選擇最小正距離。
像這樣:
SELECT rul_value, (rule_price - $price) as distance FROM my_table WHERE (rule_price - $price) < 0 ORDER BY distance DESC LIMIT 1
注意:此查詢使用filesort
,這意味着它可能是緩慢的,如果你有很多在這個表中的行。
上面的答案(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
爲什麼你刪除了以前的查詢?該查詢工作,我改變一點點,我得到了我的解決方案。請發佈,以便我可以接受它..只改變ASC到DESC –
不,以前的查詢將無法在所有情況下工作。新的更好。 – Yousf
我沒有選擇這個查詢?爲什麼你使用251 –