Подтвердить что ты не робот

Найти, если номер находится между двумя номерами в разных полях в базе данных MySQL

Как вы отформатируете запрос в базе данных 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"
4b9b3361

Ответ 1

Запрос вроде этого:

SELECT * FROM your_table WHERE 1265631252 BETWEEN `IP FROM` AND `IP TO`;

Вернет строку (строки), для которой указанный номер находится между IP FROM и IP TO.

Ответ 2

Если у вас уже есть эквивалент 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 здесь.

Ответ 3

Что-то вроде этого:

select *
from your_table
where ip_from <= '1265631252'
  and ip_to >= '1265631252'

то есть. получить все строки, для которых "1265631252" находится между ip_from и ip_to?