Php Mysql查询以获取最近的记录
我有一张桌子Php Mysql查询以获取最近的记录,php,mysql,Php,Mysql,我有一张桌子 id startmileage endmileage price 1 1 2 30 2 2 3 50 3 3 4 70 4
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到2,2到3之间的价格差。但是对于介于5到25和25到35之间的值,我尝试了一个查询,该查询将适用于最接近的值和精确的值,就像这样
SELECT *
FROM table
ORDER BY ABS( startmileage - myValue )
LIMIT 1
但是这个查询只适用于一个输入(StartMilage),因为我需要同时使用开始里程和结束里程来获得最佳的最近记录
有人能告诉我这个问题的最佳答案吗
ORDER BY
(
greatest(startmileage - $myvalue ,0)
+
greatest($myvalue - endmileage ,0)
) ASC , startmileage DESC
如果$myvalue在边界内,则等于零。若在开始编译之前,第一部分将上升,而第二部分为零。如果$myvalue在EndMiledge之后,则第一部分将为零,第二部分将上升
函数最大(???,0)
仅在大于零时返回?
,否则返回零
编辑:稍微优化的查询(工作方式相同):
你能给出一些预期的输入/输出示例吗?我不完全确定你在问什么。你试过使用最小值(ABS(startmileage-myValue)、ABS(endmiliege-myValue))吗?从
cms\u票价表中选择*按最小值排序(ABS(startmileage-7)、ABS(endmiliege-17))限制1这一个给出了语法错误,它与最接近的值配合得很好,但对于精确值,它不是这样的。从cms\u票价表中选择*按(最大(开始里程-4,0)+最大(4-结束里程,0))限制1返回开始里程=3和结束里程=4。开始里程数=4,结束里程数=5的位置。DUCTAPE quickfix:而不是EndMiledge use(EndMiledge-0.00001),你的意思是这样的?从cms_票价表中按(最大值(起始里程-4,0.00001)+最大值(4-结束里程,0.00001))限制1选择*这也会返回相同的记录问题在于,上一里程的结束与下一里程的开始是相同的数值。我必须做出改变,一个微小的改变。好吧,现在我考虑了一下,这个解决方案更好:(如果不确定的情况发生,这只会优先考虑更新的里程数);我更新了我的答案。
ORDER BY
greatest(startmileage - $myvalue , $myvalue - endmileage ) ASC
, startmileage DESC