Исходную поисковую строку надо разбить на "слова" по пробелам и обработать каждое слово. Лучше делать это не средствами MySQL, а средствами того языка из которого идёт обращение к БД.
Что делать со словами
1. Попробовать преобразовать в числовое значение. Если получилось - это строение. то надо запомнить в переменную.
2. Если не получилось, то надо проверить не является ли слово сокращением от улицы, проспекта, переулка и т.д.
Вначале надо просто составить список этих сокращений самостоятельно, а потом анализировать все запросы, которые не дали результатов и обновлять список сокращений. Повылезают интересности типа "улю" вместо "ул." и т.д., ну и проспект можно кучей вариаций сократить.
3. Дальше я бы рекомендовал хранить в таблице улиц тип улицы - улица, проспект, проезд, бульвар и т.п. , потому что в городе легко могут быть улица и проспект с одинаковым именем
4. тип улицы и строение из запроса надо удалять и искать только по очищенному наименованию.
5. алиасы названий (типа старые наименования) надо сливать в одну строку
6. делать поиск банальным like с добавлением знака '%' в начало и конец очищенного наименования
Очевидно, что в городе может быть несколько улиц с одинаковым наименованием, поэтому в таблице не хватает района города.
Не описал обработку в исходной поисковой строке букв в строении, типа 13а.
Итого
Код: Выделить всё
select
*
from
streets s,
locations l
where
s.street_id = l.streed_id
and l.title = @building
and s.full_title like CONCAT('%', @street_name, '%');
Исходную поисковую строку надо разбить на "слова" по пробелам и обработать каждое слово. Лучше делать это не средствами MySQL, а средствами того языка из которого идёт обращение к БД.
Что делать со словами
1. Попробовать преобразовать в числовое значение. Если получилось - это строение. то надо запомнить в переменную.
2. Если не получилось, то надо проверить не является ли слово сокращением от улицы, проспекта, переулка и т.д.
Вначале надо просто составить список этих сокращений самостоятельно, а потом анализировать все запросы, которые не дали результатов и обновлять список сокращений. Повылезают интересности типа "улю" вместо "ул." и т.д., ну и проспект можно кучей вариаций сократить.
3. Дальше я бы рекомендовал хранить в таблице улиц тип улицы - улица, проспект, проезд, бульвар и т.п. , потому что в городе легко могут быть улица и проспект с одинаковым именем
4. тип улицы и строение из запроса надо удалять и искать только по очищенному наименованию.
5. алиасы названий (типа старые наименования) надо сливать в одну строку
6. делать поиск банальным like с добавлением знака '%' в начало и конец очищенного наименования
Очевидно, что в городе может быть несколько улиц с одинаковым наименованием, поэтому в таблице не хватает района города.
Не описал обработку в исходной поисковой строке букв в строении, типа 13а.
Итого
[code]
select
*
from
streets s,
locations l
where
s.street_id = l.streed_id
and l.title = @building
and s.full_title like CONCAT('%', @street_name, '%');
[/code]