我需要一些SELECT查询的帮助。
有一个表' cities',它们将IP范围映射到城市。
ip_from ip_to city
------------------------------------
0.0.0.0 0.255.255.255 Los Angeles
1.0.0.0 1.0.0.255 South Brisbane
1.0.1.0 1.0.3.255 Fuzhou
1.0.4.0 1.0.7.255 Ripponlea
1.0.8.0 1.0.15.255 Guangzhou
示例:IP 0.1.2.3将是洛杉矶'和1.0.8.255'广州'。
现在我想获得具有固定IP地址的城市:
SELECT city FROM cities WHERE ip IN ('0.1.2.3', '1.0.8.255')
应该提供上述城市' LA'和'广州'。
这可能吗?这会有效吗,因为这个表有大约5百万个条目?
谢谢, 哈德
答案 0 :(得分:2)
您可以尝试以下内容:
SELECT city
FROM cities
WHERE (INET_ATON(ip) BETWEEN INET_ATON('0.1.2.3') AND INET_ATON('1.0.8.255'));
编辑:经过测试,确实有效!
SELECT city FROM cities WHERE (INET_ATON('0.0.0.0') BETWEEN INET_ATON(ip_from) AND INET_ATON(ip_to));
0.0.0.0
是您要测试的IP。