|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
Всем доброго дня! Подскажите пожалуйста такую вещь - есть база данных телефонных префиксов вида 7;Россия 79;Россия мобильные 7919; Россия МТС 7919751;Россия МТС Ставропольский край. Как построить запрос, чтобы БД выдавала самое точное соответствие номеру - к примеру по запросу номера 79197517517 выдавала строку "7919751;Россия МТС Ставропольский край"? Задача распространенная ( телефонная маршрутизация) и скорее всего давно решенная, но гугл в решении не помог. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 09:45 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
запрос, показывающий частное решение в лоб использована ф-я LOCATE (позиция первого вхождения подстроки в строку) Код: sql 1. 2. 3. 4. 5. 6.
конкретная реализация зависит от ваших данных, других вариантов также очень много (т.к. возможных строковых функций, которые можно применить, очень много) ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 10:58 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
В общем пока ждал подсказки, накопал вот такой мануал - http://voxlink.ru/kb/asterisk-configuration/region-russia/. Там предлагают сделать так- Код: sql 1. 2.
Может и не совсем правильно, но со своей задачей справляется- выдает самый длинный соответствующий номеру префикс. В моем случае это выглядело так - Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 11:01 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
Alex_Ustinov, спасибо, примерно такое решение и нашел. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 11:02 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
может так? Код: sql 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 11:12 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
bochkov, Код: sql 1. 2. 3. 4. 5. 6. 7.
Однозначно лучше первого решения, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 11:18 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
At6, множественный JOIN по подстроке. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 12:15 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
At6Однозначно лучше первого решения, спасибо!Чем же лучше? Логически точное такое же, а LOCATE обычно работает чуток быстрее, чем LIKE. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 13:10 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
miksoft, неоднозначное решение в данном виде locate может зацепить внутренне вхождение, например "7911" и "7921...7911" ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 14:05 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
Alex_Ustinovmiksoft, неоднозначное решение в данном виде locate может зацепить внутренне вхождение, например "7911" и "7921...7911"Это легко фиксится добавлением сравнения с единицей. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 14:12 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
да, точно, писал из головы, голова недодумала... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 14:27 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
20.07.2015, 14:43 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
At6 bochkov, Код: sql 1. 2. 3. 4. 5. 6. 7.
Однозначно лучше первого решения, спасибо! Некропост, но решил, что другим может быть полезно. Указанный запрос не оптимален с точки зрения поиска (происходит fulltable scan + filesort). Чтобы этого избежать: 1. Добавьте index на столбец prefix 2. Добавьте дополнительный столбец prefix_len со значением длины prefix 3. Добавьте index на столбец prefix_len В итоге у нас будет using where и backward index scan, filtered 100.0 и rows 1, вместо всех столбцов. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 10:48 |
|
Выбор самого точного префикса по номеру
|
|||
---|---|---|---|
#18+
At6 Подскажите пожалуйста такую вещь - есть база данных телефонных префиксов вида Раз уж подняли эту тему... Таблицу делал человек ничего не желающий знать про основы теории реляционных отношений. В таблице: Первая цифра - страна. Вторая - тип номера 3,4 - оператор следующие 3 - регион. Чтобы построить твой запрос надо взять номер, выделить токены, сделать поиск по этим токенам. То есть: token_type: id name1 country2 sergment3 operator4 region token: id token_type token name1 1 7 Россия2 2 9 мобильные3 3 19 МТС4 4 751 Ставропольский край И потом как-то так: Код: sql 1. 2. 3. 4. 5.
Тут в форумах по БД почему-то из раза в раз упорно принимают предложенную ТСом схему говна за константу и пытаются под неё делать такие же запросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.06.2021, 11:41 |
|
|
start [/forum/topic.php?fid=47&fpage=8&tid=1828043]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
75ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 194ms |
0 / 0 |