我有一个名为ip_address
的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。
答案 0 :(得分:0)
假设您可以创建一个名为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;