2009-10-04 65 views
0

我正在此查詢地理IP數據庫查詢問題

SELECT 
country, 
countries.code, 
countries.lat, 
countries.lng, 
countries.zoom, 
worldip.start, 
worldip.end 

FROM countries, worldip 
WHERE countries.code = worldip.code 
AND 
'91.113.120.5' BETWEEN worldip.start AND worldip.end 
ORDER BY worldip.start DESC 

與這些字段的表,

worldip   countries 
-------------- ---------------- 
start    code 
end    country 
code    lat 
country_name  lng 
        zoom 

有時我得到兩個結果在兩個不同的國家對一個IP 。我明白了爲什麼

'91.113.120.5' BETWEEN worldip.start AND worldip.end 

將返回兩種不同的結果,因爲10是10和11,而且5和12。我本來以爲包括WHERE countries.code = worldip.code之間就可以防止這一點,或至少保證我得到了正確的國家沒有重要的是它返回了多少結果。但事實並非如此。

我也加了ORDER BY worldip.start DESC這似乎工作,因爲更準確的IP地址,它出現在列表的上方。你可以看到它工作(或不)here。但是,這是一個快速解決方案,我想正確地做。

SQL對我來說是一個真正的弱點。任何人都可以解釋我做錯了什麼?

回答

2

首先不錯的應用程序。我正在尋找航班 - 我喜歡價格比較,並沒有#基於鏈接。您可以嘗試免費的geolocator服務,而不是使用您自己的geoip數據庫。那一邊是你的ip字段'IP' datatype在MySQL允許比較?這可能會幫助你獲得正確的順序。否則,將這些內容作爲字符串進行比較,並且在IP的長度不同等情況下可能會出現問題。

使用IP的整數表示,您可以使用< =和> =運算符。

+0

感謝您的回答和反饋。我正在審查所有事情,並拿出我欺騙的所有骯髒的小捷徑(href =「#」!!我知道更好)。唉,獲得航班的價格目前是遙不可及的。這個信息花了很多錢,我不得不爲每個查詢付費。這些費用是敲詐勒索。但如果有人想投資,那麼我全都是耳朵。但有更多的東西來免費,連接航班,酒店,特別優惠等。 – gargantuan

+0

我想這是飛行代理賺錢的地方,但你不能通過腳本提交他們的價格從處女,飛行星或老虎(我在澳大利亞)查詢表單和清理HTML? – whatnick

+0

是的,這是我一直在玩弄的一個想法,但有2000個航空公司可以參加,這是很多的編碼。儘管我可能只需要開始它,除非你想要採取行動? – gargantuan