我有数据库,里面有一些网络信息。数据库结构如:
ID | network | netmask | description | other_data
我需要选择description
地址所属的最小网络。
我发现如何为一个地址执行此操作...但是如何为多个地址执行此操作(不在 DB 中)?就像是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