現在、私は整数に変換し、テーブルから場所に最も近い一致を見つけようとしている IP を持っています。
私は今これをやっています:
$sql = "SELECT * FROM table WHERE IP_FROM >= $x AND IP_TO <= $x LIMIT 1;";
$x が隙間から落ちるため、結果が得られないこともあります。
最も近い行を取得できる方法を知りたいです。
ありがとう
現在、私は整数に変換し、テーブルから場所に最も近い一致を見つけようとしている IP を持っています。
私は今これをやっています:
$sql = "SELECT * FROM table WHERE IP_FROM >= $x AND IP_TO <= $x LIMIT 1;";
$x が隙間から落ちるため、結果が得られないこともあります。
最も近い行を取得できる方法を知りたいです。
ありがとう
これは LEAST で行うことができます。例:
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)
これにより、2 つの行が得られます。最初の行が目的の行でない場合は、2 番目の行になります。