0

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

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

4

0 回答 0