如何选择从MySQL数据库表中的可用IP地址

如何选择从MySQL数据库表中的可用IP地址

问题描述:

我有MySQL的表称为ip_address与列名为ip,它包含以下数据如何选择从MySQL数据库表中的可用IP地址

 
192.168.1.52 
192.168.1.7 
192.168.1.21 
192.168.1.107 
. 
. 
. 

我的问题是如何从子网获得可用的IP地址,我意味着该子网必须包含从192.168.1.1到192.168.1.255,但不保存所有IP的范围内,所以我设法对它们进行排序:

SELECT ip FROM ip_address ORDER BY INET_ATON(ip) 

我想要检索未在IP_ADDRESS表中找到的所有IP从那个范围。

假设你可以创建一个表名为numbers包括(至少)1和255之间的所有整数,那么你可以使用这样的查询,以找到一个给定的子网中未使用的IP地址:

SELECT CONCAT('192.168.1.',numbers.n) as available_ip 
FROM numbers 
LEFT OUTER JOIN ip_address ON ip_address.ip = concat('192.168.1.',numbers.n) 
WHERE numbers.n BETWEEN 1 AND 255 
    AND ip_address.ip IS NULL 
ORDER BY numbers.n;