MySQL:从具有IP范围的表中选择IP
我需要一些关于SELECT查询的帮助 有一个表“cities”,它将IP范围映射到城市MySQL:从具有IP范围的表中选择IP,mysql,Mysql,我需要一些关于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
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')
这些城市应该是“洛杉矶”和“广州”
这可能吗?因为这个表有大约500万个条目,所以这样做是否有效
谢谢,
伯恩哈德您可以尝试以下方法:
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。谢谢您的回复。那不是我所需要的。因此,如果我想知道哪个城市拥有IP“1.0.8.255”,我必须遍历“IP_from”和“IP_to”列。第一场比赛将是广州市,因为我所理解的是,ip_from>1.0.8.0,ip_to是。你能说得更清楚一点吗?好了,现在好多了!这要复杂得多!让我想想:)未测试但可能有效:从城市中选择城市,其中(INET_ATON('0.0.0.0')介于INET_ATON(ip_FROM)和INET_ATON(ip_to))之间
其中0.0.0.0
是要测试的IP。