0

我有一个名为 mysql 的表,其中包含名为ip_address列的列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。

4

1 回答 1

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;
于 2017-10-10T17:31:55.627 回答