选择最少的网络作为IP地址列表

时间:2019-03-27 13:42:23

标签: mysql networking netmask

我的DB里面有一些网络信息。 数据库结构如下:

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

0 个答案:

没有答案