2017-10-10 19 views
0

Je table MySQL appelé ip_address avec colonne appelée ip et il contient des données suivantesComment sélectionner l'adresse IP disponible à partir de la table mysql db

 
192.168.1.52 
192.168.1.7 
192.168.1.21 
192.168.1.107 
. 
. 
. 

mon problème est de savoir comment obtenir l'adresse IP disponible à partir du sous-réseau, je dire ce sous-réseau doit contenir la plage de 192.168.1.1 à 192.168.1.255 mais pas toutes les adresses IP ont été stockées, donc je réussi à les trier par:

SELECT ip FROM ip_address ORDER BY INET_ATON(ip) 

Je veux récupérer toutes les adresses IP qui ne figurent pas dans le tableau ip_address de cette gamme.

Répondre

0

En supposant que vous pouvez créer une table appelée numbers qui comprend (au moins) tous les nombres entiers compris entre 1 et 255, vous pouvez utiliser une requête comme celui-ci pour trouver les adresses IP non utilisées pour un sous-réseau donné:

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;