首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Geo IP数据库查询问题

Geo IP数据库查询问题
EN

Stack Overflow用户
提问于 2009-10-04 12:43:27
回答 1查看 391关注 0票数 0

我正在运行这个查询

代码语言:javascript
复制
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

在具有这些字段的表上,

代码语言:javascript
复制
worldip           countries
--------------    ----------------
start             code
end               country
code              lat
country_name      lng
                  zoom

有时,一个ip在两个不同的国家会得到两个结果。我明白为什么

代码语言:javascript
复制
'91.113.120.5' BETWEEN worldip.start AND worldip.end 

会返回两个不同的结果,因为10是9和11之间的结果,但也是5和12之间的结果。我会认为如果包括WHERE countries.code = worldip.code就可以避免这种情况,或者至少确保无论返回多少结果都得到正确的国家/地区。但事实并非如此。

我还添加了ORDER BY worldip.start DESC,它似乎有效,因为ip地址越准确,它出现在列表中的位置就越高。你可以看到它工作(或不工作) here。但这是一个快速的解决办法,我想把它做好。

SQL对我来说是一个真正的弱点。谁能解释一下我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-04 12:56:23

首先是不错的应用。我正在寻找航班-我会喜欢价格比较,没有#为基础的链接请。您可以尝试免费的地理定位器服务,而不是使用您自己的geoip数据库。除此之外,你在MySQL中的'IP' datatype的ip字段允许比较吗?这可能会帮助你获得正确的序数。否则,将这些内容作为字符串进行比较,可能会出现IP长度不同等问题。

对于IP的整数表示,您可以使用<=和>=运算符。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1516328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档