2015-11-02 126 views
0

我需要一些SELECT查询的帮助。MySQL:从IP范围表中选择IP地址

有一张表“城市”,它将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百万个条目?

感谢, 伯恩哈德

回答

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。

+0

感谢您的回复。这不是我所需要的。 所以如果我想知道哪个城市有IP'1.0.8.255',我必须遍历'ip_from'和'ip_to'列。第一场比赛是城市'广州',因为ip_from> 1.0.8.0,ip_to <1.0.15.255。 – Bernie

+0

这就是我所理解的。你能更明确吗? –

+0

好吧,现在好多了!这太复杂了!让我想想:) –