gpt4 book ai didi

mysql - Geo IP数据库查询问题

转载 作者:行者123 更新时间:2023-11-29 09:21:48 26 4
gpt4 key购买 nike

我正在运行此查询

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 介于 9 和 11 之间,而且也介于 5 和 12 之间。我本以为包含 WHERE states.code = worldip.code 会阻止这种情况,或者至少确保我得到正确的国家/地区,无论返回多少结果。但事实并非如此。

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

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

最佳答案

首先是不错的应用程序。我正在寻找航类 - 我希望进行价格比较,但请不要使用 #based 链接。您可以尝试免费的地理定位器服务,而不是使用您自己的 geoip 数据库。那一边是你的ip字段'IP' datatype MySQL 中允许比较吗?这可能会帮助您获得正确的序数。否则,这些内容将作为字符串进行比较,并且可能会出现 IP 长度不同等问题。

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

关于mysql - Geo IP数据库查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1516328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com