Соответствие IP-адреса диапазону IP-адресов? - PullRequest
3 голосов
/ 24 апреля 2010

У меня есть таблица настройки MySQL следующим образом:

+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| ipaddress_s   | varchar(15) | YES  | MUL | NULL    |                | 
| ipaddress_e   | varchar(16) | YES  |     | NULL    |                | 
+---------------+-------------+------+-----+---------+----------------+

где ipaddress_s и ipaddress_e выглядят примерно так: 4.100.159.0-4.100.159.255

Теперь есть ли способ получить строку, содержащую данный IP-адрес? Например, учитывая IP-адрес: «4.100.159.5», я хочу, чтобы вышеприведенная строка была возвращена. Поэтому я пытаюсь запрос, который выглядит примерно так (но, конечно, это неправильно, потому что в следующем я рассматриваю IP-адреса в виде строк):

SELECT * FROM ranges WHERE ipaddress_s<"4.100.159.5" AND ipaddress_e>"4.100.159.5"

Есть предложения?

1 Ответ

8 голосов
/ 24 апреля 2010

INET_ATON (expr) изменит строку IP-адреса на числовой адрес, который вы можете использовать для сравнения.

http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton

SELECT * FROM ranges WHERE INET_ATON(ipaddress_s)<INET_ATON('4.100.159.0') AND INET_ATON(ipaddress_e)>INET_ATON('4.100.159.5')
...