Ответ 1
Запрос вроде этого:
SELECT * FROM your_table WHERE 1265631252 BETWEEN `IP FROM` AND `IP TO`;
Вернет строку (строки), для которой указанный номер находится между IP FROM
и IP TO
.
Как вы отформатируете запрос в базе данных 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-адреса, тогда ответ от Jordan будет делать трюк.
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
Другим эквивалентом IP-адреса будет результат. В этом случае 3468664375
.
Подробнее о эквиваленте IP-адресов DWORD здесь.
Что-то вроде этого:
select *
from your_table
where ip_from <= '1265631252'
and ip_to >= '1265631252'
то есть. получить все строки, для которых "1265631252
" находится между ip_from
и ip_to
?