Коды стран и городов
Сообщений: 6521
|
Re: Коды стран и городов
Детальный морфологический анализ устойчивого выражения "респект и уважуха" выделяет четко разграниченные зоны проявления уважения. Англоязычное заимствование "респект" направлено главным образом на более официальный и/или дальний круг объектов выражения чувств. В противоположность ему сленговое "уважуха" с ярко выраженной эмоциональной окраской более характерно для приятельских отношений ближнего круга. Объединяя оба понятия одним выражением субъект стремиться как-бы охватить обе зоны, не будучи уверен в точной принадлежности объекта к какой либо одной из двух.
© ded 2009
|
Откуда: pl Earth
Сообщений: 224
|
Re: Коды стран и городов
спасибо :)
просто я както выдал эту фразу в сеть (очень пьян был, молод и счастлив) на одном из форумов году так в 1996-97-ом. после чего начал ее встречать года через полтора уже повсеместно.. я не о копирайтах а просто сам понимаю что тогда ту фразу выкрикнул в полном экстазе %) а потом начал понимать что сказал то глупость =)
ps: сорри за маленький оффтопичек. такие оффтопичики и делают жизнь разнообразней ;)
Успехов!
|
Откуда: Уфа
Сообщений: 5856
|
Re: Коды стран и городов
совершенно случайно нарыл неплохую базу стран и городов:
записи SQL вида:
INSERT INTO `destinations` (`id`, `prefix`, `direction_code`, `subcode`, `name`, `city`, `state`, `lata`, `tier`, `ocn`, `destinationgroup_id`) VALUES
(2, '93', 'AFG', 'FIX', 'Afghanistan proper', '', '', '', 0, '', 1),
(14989, '784539', 'RUS', 'FIX', 'Russia Engels', NULL, NULL, NULL, NULL, NULL, 353),
(14990, '7901132', 'RUS', 'MOB', 'Russia Evreiskiy AO Mobile', NULL, NULL, NULL, NULL, NULL, 354),
(14992, '791481', 'RUS', 'MOB', 'Russia Evreiskiy AO Mobile', NULL, NULL, NULL, NULL, NULL, 354),
(14995, '7954', 'RUS', 'FIX', 'Russia Globaltel', NULL, NULL, NULL, NULL, NULL, 353),
(14996, '749633', 'RUS', 'FIX', 'Russia Golitsino', NULL, NULL, NULL, NULL, NULL, 353),
(14997, '7903487', 'RUS', 'MOB', 'Russia Ingushetiya Mobile', NULL, NULL, NULL, NULL, NULL, 354),
23 тысячи записей
http://www.lynks.ru/doc/files/codes.rar
только нет ясности, как применять эту информацию. ведь длинна кода - переменная величина... Может кто предложит эффективный способ?
PS: "доброго времени суток" я начал первый говорить. это было в 89 году, я учился в школе и был трезв. правда авторство никто не запомнил, только Лебедев обхаял!
|
Сообщений: 3
|
Re: Коды стран и городов
Есть такое понятие как RegExp. Базы данных их понимают.
|
Сообщений: 188
|
Re: Коды стран и городов
switch:
только нет ясности, как применять эту информацию. ведь длинна кода - переменная величина... Может кто предложит эффективный способ?
В таблице destinationgroups 582 группы. Можно напрячься и вписать туда количество цифр в номере для каждой страны.
DROP TABLE IF EXISTS `destinationgroups`;
CREATE TABLE IF NOT EXISTS `destinationgroups` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
`desttype` varchar(10) default NULL,
`flag` varchar(10) default NULL,
`len` int default '11',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=583 ;
INSERT INTO `destinationgroups` (`id`, `name`, `desttype`, `flag`,`len`) VALUES
(353, 'Russian Federation', 'FIX', 'rus','11'),
(354, 'Russian Federation', 'MOB', 'rus','11'),
А потом джойнить две таблицы по коду группы.
Тогда получим в строке код и количество цифр в номере.
select prefix, len from destinations inner join destinationgroups on destinationgroups.id=destinations.destinationgroup_id
Если взять вот такой запрос
SELECT CONCAT(`prefix`,REPEAT('X',`len`-LENGTH(`prefix`))) AS CODE FROM `destinations` INNER JOIN `destinationgroups` ON `destinations`.`destinationgroup_id`=`destinationgroups`.`id`
то результат будет вот такой
93XXXXXXXXX
9375XXXXXXX
9380XXXXXXX
9340XXXXXXX
Если взять вот такой запрос
SELECT CONCAT(`prefix`,REPEAT('0',`len`-LENGTH(`prefix`))) AS Start,CONCAT(`prefix`,REPEAT('9',`len`-LENGTH(`prefix`))) AS End FROM `destinations` INNER JOIN `destinationgroups` ON `destinations`.`destinationgroup_id`=`destinationgroups`.`id`
То будет диапазон от и до, что удобно для сравнения на попадание в него номера
93000000000 93999999999
93750000000 93759999999
93800000000 93809999999
93400000000 93409999999
93600000000 93609999999
93200000000 93209999999
|
Откуда: Уфа
Сообщений: 5856
|
Re: Коды стран и городов
borispr, ты случаем не осуществил свой замысел по определению длинны кодов?
|
Сообщений: 188
|
Re: Коды стран и городов
Нет еще. Я эту базу втянул, добавил поле 'длина' и всем ее сделал 11. Сейчас думаю, как бы автоматизировать задание длины номера по странам.
|
Сообщений: 866
|
Re: Коды стран и городов
А чай.... нет, кофе.... нет, какава. ДА! Какава цель вашего визита?
(с) один анекдот про Эстонского пограничника.
Я собственно о чем - цель-то конечная какая?
Я сомневаюсь что джоин 582x23K записей это хорошая операция если ее нужно делать несколько раз в секунду. И единственный способ оптимизировать выборку будет сразу в запросе отфильтровывать по длине (когда известно сколько всего цифр ввел пользователь). И то, сильно хорошим этот запрос не будет - mysql не силен в оптимизации.
К тому же:
1. Длина национального номера вполне может быть переменная.
2. Если вы делаете проверку не в момент звонка, а уже потом - то можете попасть в ситуацию когда юзер набрал 7 495 1234567 0000000, ваш SIP оператор это принял (отрезав лишние нули совсем или передав их диалтоном ответившему номеру 1234567) а вы потом этот номер проматчить и правильно забиллать не можете.
Базы префиксные и использовать их имхо и нужно только как префиксные. То есть искать в базе запись с самым длинным матчем:
SELECT *
FROM destinations
WHERE prefix IN ('7', '74', '749', '7495', '74951', ...)
ORDER BY LENGTH(prefix) DESC
LIMIT 1
или же как говорил предыдущий оратор регекспом.
Но регексп это гарантированный fullscan таблицы, а prefix IN еще оставляет какие-то шансы на использования индекса по prefix (который надо конечно построить сначала).
|
Сообщений: 188
|
Re: Коды стран и городов
джоин 582x23K это вообще ерунда, но ни что не мешает позаносить длину непосредственно в таблицу destinations. НЕ руками во все 23 тыщи записей, а запросами по разным destinationgroup_id
А вообще, конечно, все действительно зависит от цели.
"юзер набрал 7 495 1234567 0000000, ваш SIP оператор это принял (отрезав лишние нули совсем или передав их диалтоном ответившему номеру 1234567)"
НЕ делают такого операторы, если номер не совпадает по длине, то будет ошибка. И никаких донаборов, донабор, это проблема юзера.
|
Сообщений: 866
|
Re: Коды стран и городов
джоин 582x23K это вообще ерунда, но ни что не мешает позаносить длину непосредственно в таблицу destinations. НЕ руками во все 23 тыщи записей, а запросами по разным destinationgroup_id
Можно, можно. Только как вы это использовать будете? По чему вы индекс построите? Без индекса это все full scan. И джоин ваш я практически уверен что когда все условия вы в него вкключите - тоже фуллскан даст.
НЕ делают такого операторы, если номер не совпадает по длине, то будет ошибка.
Да ну? Вы за всех операторов сразу ответите? :)
В Штатах например когда AT&T-шный серврс помогает вам запоминающийся 1-800 номер выбрать (чтобы циферки какое-то слово для вас значили) он не только 10 символьные номера генерит, но и подлиннее. Донабора конечно не будет, это я так, придумал но вот то что телко звонок на длиный номер не должен оборвать а должен его до нормального 10-значного довести - факт.
|
|