我有一张桌子
id startmileage endmileage price
1 1 2 30
2 2 3 50
3 3 4 70
4 4 5 100
5 5 25 4.5
6 25 35 7
在此表中,我已存储数据以获取里程数之间的价格(从开始到结束英里) 我可以得到1差值之间的价格,如1到2,2到3.但对于5到25和25到35之间的值,我尝试了一个查询,它将适用于最接近和精确值这样的< / p>
SELECT *
FROM table
ORDER BY ABS( startmileage - myValue )
LIMIT 1
但是这个查询仅适用于一个输入(startmileage),因为我需要使用开始和结束里程来获得最佳记录。
有人可以告诉我最好的查询吗?
答案 0 :(得分:0)
ORDER BY
(
greatest(startmileage - $myvalue ,0)
+
greatest($myvalue - endmileage ,0)
) ASC , startmileage DESC
如果$ myvalue在边界内,则相当于零。如果是在startmileage之前,第一部分将上升而第二部分为零。如果$ myvalue在endmileage之后,则第一部分将为零,第二部分将会上升。
函数greatest( ??? , 0 )
仅在大于零时返回???
,否则返回零。
编辑:位优化查询(以相同方式工作):
ORDER BY
greatest(startmileage - $myvalue , $myvalue - endmileage ) ASC
, startmileage DESC