MySQL查找两列之间最接近的整数
现在,我有一个IP,我正在将其转换为整数,然后尝试从表中查找与某个位置最接近的匹配项 我现在正在这样做:MySQL查找两列之间最接近的整数,mysql,Mysql,现在,我有一个IP,我正在将其转换为整数,然后尝试从表中查找与某个位置最接近的匹配项 我现在正在这样做: $sql = "SELECT * FROM table WHERE IP_FROM >= $x AND IP_TO <= $x LIMIT 1;"; 有时我没有得到任何结果,因为$x从裂缝中掉落 我想知道一个能找到最近一排的方法 谢谢您可以用最少的时间完成此操作,例如: select * from Table1 t order by LEAST(abs(t.IP_FROM
$sql = "SELECT * FROM table WHERE IP_FROM >= $x AND IP_TO <= $x LIMIT 1;";
有时我没有得到任何结果,因为$x从裂缝中掉落
我想知道一个能找到最近一排的方法
谢谢您可以用最少的时间完成此操作,例如:
select *
from Table1 t
order by LEAST(abs(t.IP_FROM - 123), abs(t.IP_TO - 123))
LIMIT 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)
这将给您两行,如果第一行不是您想要的行,那么第二行将是
此查询将始终执行完整表扫描。geoip数据库有超过100000条记录,geoip_城市数据库有超过300万条记录。不是您要在其上执行表扫描的表。这个答案不会进行表格扫描:这不会给出准确的结果。在一个示例中,第一行是伦敦,第二行是南安普敦。我修改了查询,请重试。