我有一个表
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之间的值,我尝试了一个查询,它将同时适用于最接近和精确的值,如
SELECT *
FROM table
ORDER BY ABS( startmileage - myValue )
LIMIT 1
但是这个查询只适用于一个输入(startmiley),因为我需要同时使用startmiley和endmiley来获得最接近的记录。
有人能告诉我对此的最佳查询吗?
ORDER BY
(
greatest(startmileage - $myvalue ,0)
+
greatest($myvalue - endmileage ,0)
) ASC , startmileage DESC
如果$myvalue在边界内,那么它将等于零。如果是在开始里程之前,第一部分将上升,而第二部分为零。如果$myvalue在结束里程之后,第一部分将为零,第二部分将上升。
函数greatest( ??? , 0 )
仅在大于零时返回???
,否则返回零。
编辑:位优化查询(工作方式相同):
ORDER BY
greatest(startmileage - $myvalue , $myvalue - endmileage ) ASC
, startmileage DESC