2011-07-20 155 views
3

我有一張記錄訪問者IP地址的表。這臺被命名爲crm_record從GeoIP國家數據庫更新MySQL表中的國家/地區字段

我已經下載了的MaxMind GeoIP的國家數據庫,並希望從該表

我知道這個查詢的更新crm_record全國現場查詢的MaxMind數據庫

SELECT country_name 
FROM crm_geo_country 
WHERE INET_ATON("82.145.208.23") BETWEEN beginip AND endip 

不過,我需要的語法的UPDATE查詢這將讓我從crm_geo_country更新crm_record鄉間田野

回答

1
UPDATE crm_record r 
JOIN crm_geo_country gc 
ON  INET_ATON(r.address) BETWEEN gc.beginip AND gc.endip 
SET  r.country = gc.country_name 

請注意,這將是相當低效。

您需要以修改geoip表格的數字格式存儲IP地址,以便使用空間字段來存儲範圍。

+0

哇,謝謝你這麼快速的回答!我明白你的意思是關於效率。我需要將它們以數字格式存儲在兩個表中嗎? –

+0

@Michael:是,並在'crm_record.address'上創建一個索引。但是,'crm_geo_country'將始終在查詢中處於領先地位,因爲它非常大。考慮將'crm_geo_country'中的範圍存儲爲'LineString'。有關詳細信息,請參閱此處:http://explainextended.com/2009/04/04/banning-ips/ – Quassnoi

+0

再次感謝。順便說一句,你有做自由職業的工作嗎? –

相關問題