{% else-1 %}
Определение мобильного оператора

                        
<?php 
/**
* Определение мобильного оператора
* автор: Nc_Soft
* Спасибо за помощь и критику Pиpиcу
* 02.03.09
*/

/*-- ----------------------------
-- Table structure for oper
-- Таблица операторов
-- ----------------------------

CREATE TABLE `oper` (
`id_oper` tinyint(4) unsigned NOT NULL auto_increment,
`oper` varchar(255) NOT NULL,
PRIMARY KEY (`id_oper`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--тут прописываем опсосов
INSERT INTO `oper` VALUES ('1', 'Megafon');
INSERT INTO `oper` VALUES ('2', 'Beeline');
INSERT INTO `oper` VALUES ('3', 'Utel');
INSERT INTO `oper` VALUES ('4', 'BWC');
INSERT INTO `oper` VALUES ('5', 'MTS');
INSERT INTO `oper` VALUES ('6', 'TELE2');
--итд

-- ----------------------------
-- Table structure for ip
-- Таблица ip адресов
-- ----------------------------

CREATE TABLE `ip` (
`id` int(10) unsigned NOT NULL auto_increment,
`id_oper` tinyint(4) unsigned NOT NULL,
`astart` int(11) unsigned NOT NULL,
`aend` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `astart_aend` (`astart`,`aend`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--диаппазоны (для примера вбито 7 диаппазонов мегафона)
INSERT INTO `ip` VALUES ('', '1', '1402275840', '1402276863');
INSERT INTO `ip` VALUES ('', '1', '1402273792', '1402275839');
INSERT INTO `ip` VALUES ('', '1', '1402277888', '1402278911');
INSERT INTO `ip` VALUES ('', '1', '1402279936', '1402280959');
INSERT INTO `ip` VALUES ('', '1', '1402281984', '1402283007');
INSERT INTO `ip` VALUES ('', '1', '1402284032', '1402285055');
INSERT INTO `ip` VALUES ('', '1', '1402286080', '1402287103');
--итд
*/

//теперь представим, что зашел человек с ip=83.149.16.32
//определим его оператора
$q=mysql_query("SELECT o.id_oper, o.oper FROM ip i
LEFT JOIN oper o ON i.id_oper=o.id_oper
WHERE INET_ATON('83.149.16.32') BETWEEN i.astart AND i.aend LIMIT 1
");
$q=mysql_fetch_row($q);

//посмотрим что получилось
print_r($q);

?>
1 55 0
Без комментариев...