現在,我有一個IP,我將其轉換爲一個整數,然後嘗試從表中找到最接近的匹配位置。MySQL在兩列之間找到最接近的整數
我現在這樣做的:
$sql = "SELECT * FROM table WHERE IP_FROM >= $x AND IP_TO <= $x LIMIT 1;";
,有時我沒有得到任何結果爲$ X通過裂縫下降。
我想知道一種方法,我可以得到最近的一排。
感謝
現在,我有一個IP,我將其轉換爲一個整數,然後嘗試從表中找到最接近的匹配位置。MySQL在兩列之間找到最接近的整數
我現在這樣做的:
$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)
這會給你兩行,如果第一行不是你想要的行,那麼第二行就是。
這不會給出準確的結果。在一個例子中,第一行是倫敦,第二行是南安普敦。 – PaulM
我修改了查詢,請再試一次。 –
太棒了,我會試試。 – PaulM
看到我的更新,我只是實現了一個更簡單的方法。 – RedFilter
此查詢將始終執行全表掃描。 geoip數據庫有超過100,000條記錄,geoip_city數據庫有超過300萬條記錄。不是您想要進行表格掃描的那種表格。此答案不會執行表掃描:http://stackoverflow.com/a/12114949/1432614 –