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

158
13

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

спросил(а) 2021-01-25T21:51:47+03:00 4 месяца, 4 недели назад
1
Решение
252

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


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

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

ответил(а) 2021-01-25T21:51:47+03:00 4 месяца, 4 недели назад
88

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

ответил(а) 2021-01-25T21:51:47+03:00 4 месяца, 4 недели назад
63

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


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

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

ответил(а) 2021-01-25T21:51:47+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема