
Вопрос о оптимальном алгоритме поиска в БД
а тебе нужны внутренние номера этих АТС?mogikanin писал(а):to stix-s у каждой АТС свои правила набора тел. номеров, номера имеют стандартный тип только в том случае если звонки с этих номеров идут через телефонные сети общего пользования, если же вызов идет не через сети ТФОП то номера могут быть и не стандартными, единственное условие - они должны быть уникальными для этой АТС


база твоя, а про char - varchar я уже говорилmogikanin писал(а):select * from test where '8442700550' starting with (test.pref);
результат такого запроса пустой, хотя в базе есть записи у которых префикс = "8442", "844270", может где-то надо пробелы отрезать ?

что там у нас происходит, если длина поля char больше фактического значения, ась?

Последний раз редактировалось stix-s 20 июн 2007, 14:58, всего редактировалось 1 раз.
Все таки пробелы
http://www.sql.ru/faq/faq_topic.aspx?fid=272

Что-то мне интересно стало как работает starting with наоборот.
При таком раскладе получился натуральный перебор:
и
А так уже с индексами:
А так вообще результат отсутствует:
При таком раскладе получился натуральный перебор:
Код: Выделить всё
select * from people pp where
'ЛЕНИНА' starting with(pp.ulica)
Код: Выделить всё
select * from people pp where
'ЛЕНИНА В' starting with(pp.ulica)
Код: Выделить всё
select * from people pp where
(pp.ulica) starting with 'ЛЕНИНА'
Код: Выделить всё
select * from people pp where
'ЛЕНИНА В' starting with upper(pp.ulica)
Не вижу тут проблемы:stix-s писал(а):select * from prefixes px
where '83466343126' starting with (px.prefix) - отрабатывает на ура, находит нужный мне префикс, проблема будет, если их будет несколько разной длины 834, 8346, 83466
Код: Выделить всё
select first 1 *
from prefixes px
where '83466343126' starting with (px.prefix)
order by char_length(px.prefix) desc
естессно, вот это и проблема - дополнительная сортировкаWildSery писал(а):Не вижу тут проблемы:stix-s писал(а):select * from prefixes px
where '83466343126' starting with (px.prefix) - отрабатывает на ура, находит нужный мне префикс, проблема будет, если их будет несколько разной длины 834, 8346, 83466Если там с пробелами - перед определением длины отрезать.Код: Выделить всё
select first 1 * from prefixes px where '83466343126' starting with (px.prefix) order by char_length(px.prefix) desc
можно еще дополнительное поле в префиксы ввести, с длиной префикса и по нему сортировать


пробелы резать - может проще их сразу не создавать?
