Найти, если номер находится между двумя номерами в разных полях в базе данных 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" 

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

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

 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 ?