我正在运行这个查询
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 countries.code = worldip.code
会阻止这种情况发生,或者至少确保我得到正确的国家/地区,无论返回多少结果。但事实并非如此。
我还添加了ORDER BY worldip.start DESC
这似乎有效,因为 IP 地址越准确,它出现的列表就越高。你可以在这里看到它工作(或不工作)。但这是一个快速的解决方案,我想把它做好。
SQL 对我来说是一个真正的弱点。谁能解释我做错了什么?