start ... ip из цикла ... end
1.
Веталь (04.09.2010 / 12:43)
народ)) всем привет помогите решить задачку.
вот есть у меня БД с ip операторов в таблице имеется два поля `start` и `end` например
id = 1, local = UA, name = Astelite, start = 127.0.0.1, end = 127.0.0.255;
как мне узнать что это именно этот оператор например от ip 127.0.0.95
заранее спасибо
2.
Веталь (04.09.2010 / 12:52)
и че никто не знает?
3.
Александр (04.09.2010 / 13:44)
Плохая реализация, лучше бы ip как число записал, тогда запрос уместился бы а 1 строчку. Не подкинешь базу?
4.
Станислав (04.09.2010 / 13:48)
1.
vander, ну, как вариант, для сравнения тогда вырезай нафиг точки и определяй входит ли нужный ip(опять-таки без точек) в необходимый интервал.
Как-то так. Может можно и подругому
5.
Веталь (04.09.2010 / 13:55)
это исключается.. посколько в таком случае нужно выводить всю таблицу из БД эксплодить каждое ее значение на 4 части и каждое из них сравнивать со значением проэксплоденного шаблона именно который и нужно искать в интервале.. зделать некую маску. но это создаст неймоверную нагрузку на сервер... меня интересует можно ли как нидь из Базы данных мускула на ходу провести поиск по маске типа:
SELECT * FROM `operators` WHERE (`start` = '127.0.0.**');
было бы конечно неплохо но помоему это не возможно средствами мускула именно поэтому я и не добавлял тему в подраздел по БД...
6.
Станислав (04.09.2010 / 13:58)
Нафиг на 4 части? Просто прогоняй, банально, через str_replace и убирай нафиг все точки. Вот и всё. Я хз что тут ещё предложить.
7.
Александр (04.09.2010 / 14:01)
Проще и лучше всего перевести через (ip2long вроде) в число. типа d = 1, local = UA, name = Astelite, start = 9871727001, end = 9989082585; и запрашивать по SELECT * FROM `operators` WHERE (`start` > 99957475 and `start`<99957475);
8.
Веталь (04.09.2010 / 14:04)
Муз-ТВ, ыыыыыыыыыыы у меня недостаточно КЦ плюс поставил бы сэнкс огромный.... ip2long - все сложные задачи решаются простыми уравнениями!
)
9.
Веталь (04.09.2010 / 14:08)
ы новая проблема... ip2long в БД добавляет -1020264704 в чем трабла???
в бд значения безу из файла сам код который делает жизнь проще:
$file = file("file.txt");
for ($i=0;$i<count($file);$i++)
{
$data = explode (";", $file[$i]);
$result = mysql_query ("INSERT INTO `moboperator` (
`id` ,
`name`,
`local`,
`start`,
`end`
)
VALUES (
NULL, '".$data[1]."', '".$data[0]."', '".ip2long($data[2])."', '".ip2long($data[3])."'
);");
}
в чем ошибка... ща почитаю лабу по функции...
10.
Веталь (04.09.2010 / 14:13)
sprintf() тоже не помогает!
11.
Веталь (04.09.2010 / 14:15)
короче в поле старт записует отрицательное значение а поле end вообще остается пустым...
12.
Веталь (04.09.2010 / 15:15)
все разобрался... всем спасибо...
13.
Олег (04.09.2010 / 16:35)
В MySQL есть 2 функции. Одна позволяет сетевой адрес преобразовать в целое значение. И вторая функция — наоборот. Это INET_ATON и INET_NTOA соответсвенно.
mysql> SELECT INET_ATON('127.0.0.1') as value;
+------------+
| value |
+------------+
| 2130706433 |
+------------+
1 row in set (0.00 sec)
URL:
https://visavi.net/topics/13319