2015-11-02 88 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

好吧,現在好多了!這太複雜了!讓我想想:) –