如何从mysql db表中选择可用的IP地址

时间:2017-10-10 17:05:22

标签: mysql select ip inet-aton

我有一个名为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。

1 个答案:

答案 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;