1

現在、私は整数に変換し、テーブルから場所に最も近い一致を見つけようとしている IP を持っています。

ここに画像の説明を入力

私は今これをやっています:

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

$x が隙間から落ちるため、結果が得られないこともあります。

最も近い行を取得できる方法を知りたいです。

ありがとう

4

2 に答える 2

1

これは LEAST で行うことができます。例:

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

SQL フィドルの例

于 2012-08-24T18:28:44.157 に答える
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 番目の行になります。

SqlFiddle の例

于 2012-08-24T18:40:46.223 に答える