MySQL在两列之间找到最接近的整数

时间:2012-08-24 18:19:47

标签: mysql

现在,我有一个IP,我将其转换为整数,然后尝试从表中找到与某个位置最接近的匹配。

enter image description here

我现在正在这样做:

$sql = "SELECT * FROM table WHERE IP_FROM >= $x AND IP_TO <= $x LIMIT 1;";

有时我没有得到任何结果,因为$ x从裂缝中掉了下来。

我想知道一种可以获得最近行的方法。

由于

2 个答案:

答案 0 :(得分:1)

您可以使用LEAST执行此操作,例如:

select * 
from Table1 t 
order by LEAST(abs(t.IP_FROM - 123), abs(t.IP_TO - 123)) 
LIMIT 1 

SQL Fiddle Example

答案 1 :(得分:1)

这应该适用于所有情况:

(SELECT * FROM geoip FORCE INDEX (IP_FROM) WHERE IP_FROM <= $x ORDER BY IP_FROM DESC LIMIT 1)
UNION
(SELECT * FROM geoip FORCE INDEX (IP_TO) WHERE IP_TO >= $x ORDER BY IP_TO LIMIT 1)

这将为您提供两行,如果第一行不是您想要的行,则第二行将是。

SqlFiddle example