Mysql查询获取最接近的记录

时间:2014-11-04 09:24:16

标签: php mysql

我有一张桌子

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),因为我需要使用开始和结束里程来获得最佳记录。

有人可以告诉我最好的查询吗?

1 个答案:

答案 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