Наш чат в Telegram для обмена идеями, проектами, мыслями, людьми в сфере ИТ г.Ростова-на-Дону: @it_rostov

Структура информационной базы для GEO-скриптов

Страны

Здесь можно посмотреть страны, входящие в базу данных. При выборе страны, вы увидите области, штаты, провинции, регионы, районы и города.

CREATE TABLE `pb_country` (
  `name` varchar(64) NOT NULL,
  `fullname` varchar(256) NOT NULL DEFAULT '',
  `english` varchar(64) NOT NULL DEFAULT '',
  `id` char(2) NOT NULL,
  `country_code3` char(3) NOT NULL DEFAULT '',
  `iso` char(3) NOT NULL DEFAULT '',
  `telcod` char(4) NOT NULL DEFAULT '',
  `telcod_len` tinyint(4) NOT NULL DEFAULT '0' COMMENT 'длина номера телефона',
  `location` char(10) DEFAULT '',
  `capital` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Столица',
  `mcc` int(3) NOT NULL DEFAULT '0' COMMENT 'Код страны телефонных операторов',
  `lang` varchar(64) NOT NULL DEFAULT '' COMMENT 'Основной язык',
  `langcod` varchar(12) NOT NULL DEFAULT '' COMMENT 'коды языков через ,',
  `wiki` varchar(1024) DEFAULT NULL COMMENT 'ссылка на wikipedia без https://	',
  UNIQUE KEY `name` (`name`),
  UNIQUE KEY `id` (`id`)
) 

Регионы, области

capital - ссылка на город, областной центр

CREATE TABLE `pb_area` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `okrug` varchar(64) NOT NULL DEFAULT '',
  `autocod` varchar(128) NOT NULL DEFAULT '',
  `capital` int(10) unsigned NOT NULL DEFAULT '0',
  `english` varchar(64) NOT NULL DEFAULT '',
  `iso` varchar(3) NOT NULL DEFAULT '',
  `country` char(2) NOT NULL,
  `vid` int(3) NOT NULL DEFAULT '0' COMMENT 'регион/область/и т.д.',
  `wiki` varchar(1024) DEFAULT NULL COMMENT 'ссылка на wikipedia без https://',
  PRIMARY KEY (`id`),
  KEY `country` (`country`)
) 

Районы области

Районы области в которые входят города

CREATE TABLE `pb_rajon` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `area` int(10) unsigned NOT NULL,
  `country` char(2) NOT NULL,
  `capital` int(10) unsigned NOT NULL DEFAULT '0',
  `english` varchar(64) NOT NULL DEFAULT '',
  `vid` int(3) NOT NULL DEFAULT '0' COMMENT 'регион/область/и т.д.',
  `parent` int(11) NOT NULL DEFAULT '0' COMMENT 'родительский район для подрайона',
  `iso` varchar(5) NOT NULL DEFAULT '',
  `wiki` varchar(1024) DEFAULT NULL COMMENT 'ссылка на wikipedia без https://',
  PRIMARY KEY (`id`)
) 

Города

Возможно в стране нет областей и наличие городов не привязанных к области.
level:
0-очень маленький или неклассифицированный населенный пункт
1-Областной центр или город с населением более 1 млн.человек
2-Районный центр или город с населением более 100 тыс.человек
3-Город с населением более 15 тыс.человек
4-Деревня/станица/хутор с населением менее 15 тыс.человек

CREATE TABLE `pb_city` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(64) NOT NULL,
  `area` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'область',
  `telcod` varchar(256) NOT NULL DEFAULT '',
  `latitude` float DEFAULT NULL COMMENT 'широта',
  `longitude` float DEFAULT NULL COMMENT 'долгота',
  `time_zone` float DEFAULT NULL COMMENT 'Время относительно UTC(GMT)',
  `tz` varchar(64) CHARACTER SET ascii NOT NULL DEFAULT '' COMMENT 'название временной зоны',
  `english` varchar(64) NOT NULL DEFAULT '',
  `rajon` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'район области',
  `sub_rajon` int(11) NOT NULL DEFAULT '0' COMMENT 'подрайон в райне',
  `country` char(2) NOT NULL,
  `sound` char(4) NOT NULL DEFAULT '',
  `level` tinyint(4) NOT NULL DEFAULT '0' COMMENT '1-столица Округа, 2-крупный город, 3-небольшой населенный пункт',
  `iso` varchar(3) NOT NULL DEFAULT '',
  `vid` tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '1-город, 2-поселок, 3-село, 4-деревня, 5-станица, 6-хутор',
  `post` varchar(512) NOT NULL DEFAULT '' COMMENT 'Почтовый код',
  `geonameid` int(10) unsigned DEFAULT NULL,
  `wiki` varchar(1024) DEFAULT NULL COMMENT 'ссылка на wikipedia без https://',
  PRIMARY KEY (`id`),
  UNIQUE KEY `geonameid` (`geonameid`),
  KEY `sound` (`sound`),
  KEY `area` (`area`),
  KEY `telcod` (`telcod`),
  KEY `post` (`post`(333)),
  KEY `country` (`country`),
  KEY `rajon` (`rajon`),
  KEY `sub_rajon` (`sub_rajon`),
  KEY `wiki` (`wiki`(333)),
  KEY `latitude` (`latitude`,`longitude`)
) 

Районы крупных городов

CREATE TABLE `pb_rajon_city` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(128) NOT NULL,
  `city` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Город',
  `english` varchar(64) NOT NULL DEFAULT '',
  `parent` int(10) unsigned NOT NULL DEFAULT '0',
  `polygon` text,
  PRIMARY KEY (`id`),
  UNIQUE KEY `city_2` (`city`,`name`),
  KEY `city` (`city`)
) 

Телефонные коды

Список телефонных кодов
Eсли city пустой, то код для всего региона.
Все коды сотовых операторов добавлены в city с кодом области = 0

CREATE TABLE `pb_telcod` (
  `okrug` int(10) NOT NULL COMMENT 'Код региона',
  `city` int(10) unsigned NOT NULL COMMENT 'Код города',
  `oper` int(10) unsigned NOT NULL COMMENT 'Код оператора',
  `deffrom` varchar(15) NOT NULL,
  `defto` varchar(15) NOT NULL,
  `country` char(2) NOT NULL,
  `mnc` int(3) NOT NULL DEFAULT '0',
  `route` char(5) NOT NULL DEFAULT '' COMMENT 'маршрут',
  UNIQUE KEY `deffrom` (`deffrom`) USING BTREE,
  KEY `oper` (`oper`),
  KEY `defto` (`defto`)
) 

Телефонные операторы

CREATE TABLE `pb_oper` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(512) NOT NULL,
  `mobile` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `mvno` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Виртуальный оператор',
  `country` char(2) NOT NULL,
  `mnc` int(4) unsigned NOT NULL DEFAULT '0',
  `brand` varchar(64) NOT NULL DEFAULT '',
  `url` varchar(128) NOT NULL DEFAULT '' COMMENT 'сайт оператора',
  `deleted` timestamp NULL DEFAULT NULL COMMENT 'дата удаления',
  `inn` bigint(20) NOT NULL DEFAULT '0' COMMENT 'ИНН ',
  PRIMARY KEY (`id`),
  KEY `country_mnc` (`country`,`mnc`),
  KEY `country_inn` (`country`,`inn`) USING BTREE
) 

IP - диапазоны

Соответствие IP и страны/города

CREATE TABLE `pb_geo__base` (
  `long_ip1` bigint(20) NOT NULL,
  `long_ip2` bigint(20) NOT NULL,
  `country` char(2) NOT NULL,
  `city` varchar(64) NOT NULL,
  `upd` datetime NOT NULL COMMENT 'актуальность',
  `oper` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'Оператор сотовой связи',
  UNIQUE KEY `INDEX` (`long_ip1`,`long_ip2`)
) 

IP - диапазоны

CREATE TABLE `pb_geo__ip` (
  `long_ip1` bigint(20) NOT NULL,
  `long_ip2` bigint(20) NOT NULL,
  `whois` text NOT NULL,
  `upd` datetime NOT NULL COMMENT 'актуальность',
  UNIQUE KEY `long_ip1` (`long_ip1`)
) 

Языки

CREATE TABLE `pb_lang` (
  `id` int(11) NOT NULL COMMENT 'Цифровой код',
  `name` varchar(64) NOT NULL,
  `english` varchar(64) NOT NULL,
  `iso1` char(2) NOT NULL,
  `iso2` varchar(32) NOT NULL,
  `iso3` char(3) NOT NULL,
  `gost` char(3) NOT NULL,
  PRIMARY KEY (`id`)
) 

Синонимы

CREATE TABLE `pb_sinonim` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `sinonim` varchar(512) CHARACTER SET utf8mb4 NOT NULL,
  `tbl` varchar(64) NOT NULL DEFAULT '',
  `lang` int(11) NOT NULL DEFAULT '0' COMMENT 'язык',
  `tbl_id` int(11) NOT NULL DEFAULT '0' COMMENT 'id в таблице при переименовании',
  PRIMARY KEY (`id`),
  KEY `name` (`name`),
  KEY `tbl` (`tbl`,`tbl_id`,`name`),
  KEY `sinonim` (`sinonim`(128)) USING BTREE
) 


Подключение к базе, общие PHP-функции работы с MySql-базой

config.php

define("db_prefix","pb_");        // префикс всех БД
define("DBName","htmlwebru");   // Имя базы данных (в данном случае надо менять значение "test")
define("HostName","localhost"); //  Имя сервера (хост)
define("UserName","root");        //  Логин
define("Password","");            //  Пароль

@ini_set(magic_quotes_sybase,0);    // одиночная кавычка ескапируется обратным слешем


if(!function_exists('sql')){
function add_sqlerror($err) {
    global $link;
    if (!headers_sent())header("HTTP/1.0 503 Service Unavailable");
    $err=date("d.m.Y H:i")."
".$err."
info:".@mysqli_info($link)."
error:". @mysqli_error($link)."

";    //."

Процессы:";
    //AddToLog(str_replace("
", "<br>
", $err), 'SQL error report');
    die( "<b>Произошла ошибка SQL.</b> Администратор оповещен!
<!--".$err.'-->');
}
function sql($query) {
    global $link;
    $res=mysqli_query ($link, $query );
    if(!$res)add_sqlerror("Запрос:
".$query."
");
    return $res;
}
function GetName($tbl, $id){
   $query=sql('SELECT name FROM '.db_prefix.$tbl.' WHERE id="'.$id.'" LIMIT 1');
   return (($data = mysqli_fetch_assoc($query)) ? $data['name'] : '' );
}
function SendAdminMail($Subj, $Body, $from=''){ // отправка сообщения всем операторам и админам
if(empty($from)){
    $from="From: <noreply@".preg_replace("/www\./i","",$_SERVER['SERVER_NAME']).">
Content-Type: text/html; charset=utf-8";
    $Body="<html><body>".$Body."</body></html>";}
return mail(AdminMail, $Subj, $Body, $from);
}
function _USER_SetLocaleRus()
{
 $arrLocales = array('ru_RU.CP1251', 'ru_RU.cp1251', 'ru_RU', 'RU');
 foreach ($arrLocales as $strLocaleName)
 {setlocale(LC_ALL, $strLocaleName);
  if (strtolower("qwertyёЁАБГДЯQWERTYZ") == "qwertyёёабгдяqwertyz") break;
 }
}

}

_USER_SetLocaleRus();

if (!@mysqli_connect(HostName,UserName,Password)){
    usleep(500000); // 0.5 сек
    $link=mysqli_connect($link, HostName,UserName,Password) or add_sqlerror("Невозможно подключение к MySQL: ".HostName);
}
if (!mysqli_select_db($link, DBName)){
    usleep(500000); // 0.5 сек
    mysqli_select_db($link, DBName) or add_sqlerror("Невозможно открыть: ".DBName);
}

Скачать базу данных стран и городов со всеми таблицами.

Смотрите также:
Все географические сервисы и скрипты.


.