Mam tabele, która przechowuje informacje o komputerach, która wygląda mniej więcej tak:
CREATE TABLE komputery ( id int(10) NOT NULL AUTO_INCREMENT, nazwa varchar(20) COLLATE utf8_polish_ci NOT NULL, lokalizacja varchar(20) COLLATE utf8_polish_ci NOT NULL, adres_ip int(16) UNSIGNED NOT NULL, ... PRIMARY KEY (id), UNIQUE KEY nazwa (nazwa), UNIQUE KEY adres_ip (adres_ip) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;
oraz tabele określająca sieci IP:
CREATE TABLE sieci ( id int(10) NOT NULL AUTO_INCREMENT, nazwa varchar(20) COLLATE utf8_polish_ci NOT NULL, adres_ip int(16) UNSIGNED NOT NULL, maska varchar(20) COLLATE utf8_polish_ci NOT NULL, brama varchar(20) COLLATE utf8_polish_ci NOT NULL, ... PRIMARY KEY (id), UNIQUE KEY adres_ip (adres_ip), UNIQUE KEY nazwa (nazwa) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci AUTO_INCREMENT=1 ;
I teraz chcę wyświetlić cały zakres adresów IP z podanej sieci na podstawie adresu IP sieci oraz maski tej sieci a w miedzy czasie chcę odpytać tabele komputery czy tam znajduje się adres IP z tej sieci, jeśli tak to zamiast adresu IP ma się wyświetlić nazwa komputera. Schemat poglądowy:
tabela komputery:
nazwa=komp
ip=192.168.1.3
nazwa=komp1
ip=192.168.1.5
tabela sieci
IP=192.168.1.0
maska 255.255.255.0
wynik:
192.168.1.0
192.168.1.1
192.168.1.2
komp
192.168.1.4
komp1
...
192.168.1.255
Napisałem coś takiego
<?php $sql1='select adres_ip,maska from sieci where id="'.$_GET['id'].'"'; $maska=maska_prefix($zaw1[1]); $do=$zaw1[0]+pow(2,32-$maska); for ($i=$zaw1[0]; $i<$do; $i++){ $sql2='select count(adres_ip) from komputery where adres_ip="'.$i.'"'; if($zaw2[0]!=0){ $sql3='select id, nazwa from komputery where adres_ip="'.$i.'"'; } else{ } } ?>
funkcja maska_prefix zamienia adres z postaci A.B.C.D do postaci prefixowej np: 255.255.255.0 to 24
I teraz mam pytanie do Was drodzy forumowicze czy da się jakoś uprościć (zmniejszyć liczbę zapytań) ten zapis? Przy małej liczbie adresów w sieci jest jeszcze ok ale jak już pojawi się maska np: 255.0.0.0 to zwis na dłuższy czas. Za zainteresowanie z góry wielkie dzięki.
Pozdrawiam.