Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查找两列之间最接近的整数_Mysql - Fatal编程技术网

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

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

现在,我有一个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 - 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万条记录。不是您要在其上执行表扫描的表。这个答案不会进行表格扫描:这不会给出准确的结果。在一个示例中,第一行是伦敦,第二行是南安普敦。我修改了查询,请重试。