现在,我有一个IP,我将其转换为整数,然后尝试从表中找到与某个位置最接近的匹配。
我现在正在这样做:
$sql = "SELECT * FROM table WHERE IP_FROM >= $x AND IP_TO <= $x LIMIT 1;";
有时我没有得到任何结果,因为$ x从裂缝中掉了下来。
我想知道一种可以获得最近行的方法。
由于
答案 0 :(得分:1)
您可以使用LEAST执行此操作,例如:
select *
from Table1 t
order by LEAST(abs(t.IP_FROM - 123), abs(t.IP_TO - 123))
LIMIT 1
答案 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)
这将为您提供两行,如果第一行不是您想要的行,则第二行将是。