У меня есть БД с некоторой сетевой информацией внутри.Структура БД:
ID | network | netmask | description | other_data
Мне нужно выбрать description
наименьшей сети, к которой принадлежит адрес.
Я нашел, как это сделать для одного адреса ... Но каксделать это для нескольких адресов (не в БД)?Что-то вроде WHERE ip IN ( [list of ip] )
CREATE TABLE `networks` (
`network_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`network` int(10) unsigned NOT NULL,
`mask` int(10) unsigned NOT NULL,
`network_dec` varchar(18) NOT NULL COMMENT 'Сеть в десятичном виде.',
`asn_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`network_id`),
UNIQUE KEY `u1` (`network`,`mask`),
KEY `asn_id` (`asn_id`),
KEY `network` (`network`),
KEY `mask` (`mask`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `networks` (`network`, `mask`, `network_dec`, `asn_id`) VALUES
(INET_ATON('10.20.30.0'), INET_ATON('255.255.255.192'), 'desc_0', 1000),
(INET_ATON('10.20.30.0'), INET_ATON('255.255.255.0'), 'desc_1', 1000),
(INET_ATON('10.20.30.0'), INET_ATON('255.255.255.240'), 'desc_2', 1000),
(INET_ATON('10.20.0.0'), INET_ATON('255.255.0.0'), 'desc_3', 2000),
(INET_ATON('10.20.0.0'), INET_ATON('255.255.240.0'), 'desc_4', 2000),
(INET_ATON('10.0.0.0'), INET_ATON('255.0.0.0'), 'desc_5', 1000),
(INET_ATON('10.0.0.0'), INET_ATON('255.192.0.0'), 'desc_6', 5000),
(INET_ATON('10.0.0.0'), INET_ATON('255.224.0.0'), 'desc_7', 5000),
(INET_ATON('10.0.0.0'), INET_ATON('255.240.0.0'), 'desc_8', 5000),
(INET_ATON('10.0.0.0'), INET_ATON('255.252.0.0'), 'desc_9', 5000),
(INET_ATON('10.0.0.0'), INET_ATON('255.254.0.0'), 'desc_10', 5000),
(INET_ATON('10.0.0.0'), INET_ATON('255.255.0.0'), 'desc_11', 6000);
Пример в SQLFiddle: http://sqlfiddle.com/#!9/b339a/5/0