如何选择从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;