Как вы отформатируете запрос в базе данных MySQL через PHP, чтобы определить, попадает ли IP-адрес между двумя номерами в двух разных полях?
Числовое представление IP-адреса для поиска:
1265631252
Формат базы данных:
IP FROM IP TO REGISTRY ASSIGNED CTRY CNTRY COUNTRY "1265631232","1265893375","arin","1152835200","US","USA","United States" "1265893376","1265958911","arin","1149120000","US","USA","United States" "1265958912","1266024447","arin","1149120000","US","USA","United States" "1266024448","1266089983","arin","1162425600","US","USA","United States"
Запрос вроде этого:
SELECT * FROM your_table WHERE 1265631252 BETWEEN `IP FROM` AND `IP TO`;
Вернет строку (строки), для которой поставляемый номер находится между IP FROM
и IP TO
.
Если у вас уже есть эквивалент DWORD IP-адреса, тогда ответ от Иордании сделает трюк.
SELECT * FROM your_table WHERE 1265631252 BETWEEN `IP FROM` AND `IP TO`;
Если вам нужно, перед выполнением запроса вычислить эквивалент DWORD ip-адреса, вы можете сделать следующее.
Учитывая ip-адрес a
в форме part1.part2.part3.part4
тогда эквивалент DWORD можно вычислить по формуле:
dword(a) = ((a.part1 * 256 + a.part2) * 256 + a.part3) * 256 + a.part4
а затем вы можете использовать dword(a)
результате своего SQL-запроса.
Начните с IP-адреса, такого как 206.191.158.55
.
((206 * 256 + 191) * 256 + 158) * 256 + 55
Результатом будет эквивалент dword IP-адреса. В этом случае 3468664375
.
Подробнее о DWORD эквиваленте IP-адресов здесь .
Что-то вроде этого:
select * from your_table where ip_from <= '1265631252' and ip_to >= '1265631252'
т.е. получить все строки, для которых « 1265631252
» находится между ip_from
и ip_to
?