powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск адреса по отдельным словам
14 сообщений из 14, страница 1 из 1
Поиск адреса по отдельным словам
    #38875002
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Есть у меня в таблице Filials столбец Address со стандартными почтовыми адресами из разных городов в транслите. Для примера несколько строк:
g. Moskva, ul. Pushkina, 236
g. Samara, pr. Lenina 123
h. Nizhnie Predunki, Astrahanskaya obl. ul. Lenina 25
s. Solevoe, Orlovskaya obl, bulvar Lenina 236
g. Frolovo, Volgogradskaya obl. ul. Zemlyznskogo 236
Мне передают части адреса, в которых возможны ошибки и нужно найти минимальное количество совпадений, но не нулевое.

Я создаю запрос SELECT Address FROM Filials WHERE Address LIKE '%...%' OR Address LIKE '%...%'

При пересылке запроса со словами "Lenina" и "236" я получу все указанные адреса, т.к. в них присутствует или номер дома или название улицы. Еще больше результатов получается с учетом поиска городов.

Тогда я создаю запрос SELECT Address FROM Filials WHERE Address LIKE '%...%' AND Address LIKE '%...%'

При наличии ошибки в слове "Lenna" я не получу ни одного значения.

Как я понимаю, мне нужно составить запрос с учетом пересечений, т.е. с JOIN-ами. С ними у меня очень не получается составить запрос, т.к. количество отдельных слов для поиска может быть довольно большим. Города могут состоять из 2-3 слов, типа Нижний Балыклей, Ростов на Дону. Улицы тоже могут быть типа "39 бакинских комиссаров", "площадь 29 украинской гвардейской краснознаменной танковой дивизии" и т.д. Какой JOIN здесь городить я вообще не понимаю.
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875045
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если ты сделаешь
SELECT Address FROM Filials WHERE Address LIKE '%Lenina%' AND Address LIKE '%Lenina%'
ты из твоего списка получишь только обну запись.
если у тебя на входе слово с ошибкой и возвращается 0 записей - нужно вывести сообщение
"адресс не существует или проверьте введёное"
иначе тебе придется использовать SOUNDEX(str) (что не пробывал и не уверен)
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875090
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадя имел ввиду
Код: sql
1.
select .... where address  like "%Lenina%236%"


ну либо хотел это сказать но сказал что-то не понятное :)
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875110
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,

Вообще ничего не понял
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875118
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex564657498765453,

В таблице написание может выглядеть как
"Rostov na Donu ul. Krasnih komissarov 25" или "ul. Krasnih komissarov 25 g. Rostov na Donu". Если в таблице первый вариант и передадут "Rostov" "komissarov" "25", то адрес попадет под маску запроса like "%Rostov%komissarov%25%". Но передать могут в обратном порядке или в базе есть записи второго вида, тогда выборка уже не сработает. Диких сочетаний многосложных городов и улиц довольно много, порядок чередования везде разный. Такая маска подойдет максимум в 70% случаев, это очень мало.
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875127
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT Address FROM Filials WHERE Address LIKE '%Lenina%' AND Address LIKE '%236%'

гыыы
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875137
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
последний вариант правильный, этих лайков можно добавлять до и больше.
но как правило достаточно 4.
я такой способ использую уж очень долго, ещё не подводил.
к примеру 25 дом на улице ленина в ростове
рост 25 лен
я уверен в России этому будет соответствовать не больше 5 записей
если их вывести в выпадающем списке - то выбрать нужное просто.
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875160
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадяSELECT Address FROM Filials WHERE Address LIKE '%Lenina%' AND Address LIKE '%236%'

гыыы
Похоже, что вы не очень внимательно читали условие задачи. В передаваемых данных могут быть опечатки. В этом случае запрос вернет 0 значений. В базе может быть мельчайшее отличие от запроса и результатов на выходе не будет. В базе может быть запись
Rostov Lenina 35, в человек запросит Rostov Lenina 35a и опять результат не увидим. Сочетаний очень много, при которых результат не отображается.
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875214
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rostov Lenina 35a - а кто утвердает, что это опечатка?
может чел ищет именно 35а?
и в этом случае возврат 0 записей верный результат - ""адресс не существует или проверьте введёное""
третьего не дано

для таккого поиска по лайк нет неоходимомсть вводить полные названия можно и части слов, что приведёт к уменьшению опечаток, но к увеличению результатов отбора
я не знаю откуда тс получает слова для поиска, поэтому трудно что-то сказать
у меня всё вводится в одном поле при каждом введеном символе строка парсится в конструцию like.
и делается запрос . поэтому если при вводе очередного символа получается пустой результат - чел сразу видит, что введено нето и нчинает чесать репу
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875427
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey_privacyЕсть у меня в таблице Filials столбец Address со стандартными почтовыми адресами из разных городов в транслите.
Всё, что Вы пишете, является всего лишь доказательством простейшего факта - придуманный Вами "стандарт", мягко говоря, далёк от идеального.

Стандартные почтовые адреса в транслите - это адреса, полученные в строгом соответствии с ФИАС (в крайнем случае КЛАДР) и ГОСТом транслитерации. Всё остальное - это самодеятельность различных степеней применимости и соответствия.
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875439
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слова передаются целиком, без сокращений. Строка приходит вся сразу. Один из вариантов - получение из другой базы русских слов с последующей автоматической транслитерацией. Реальная ситуация:
В базе есть адрес
Volgograd, Krasniy Oktyabr,Sovetskaya,21

Из другой базы получили
КрасныйОктябрь, ул.Советская, 21, 404236 Волгоград

Если поиск прошел по словам "Volgograd" AND "Sovetskaya" AND "21", то все нормально.
Если ищем "Volgograd" AND "KrasniyOktyabr" AND "Sovetskaya" AND "21"
То этот адрес не найдем. Таких ситуаций очень много, их надо отсечь.
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875495
sergey_privacy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaВсё, что Вы пишете, является всего лишь доказательством простейшего факта - придуманный Вами "стандарт", мягко говоря, далёк от идеального.

Стандартные почтовые адреса в транслите - это адреса, полученные в строгом соответствии с ФИАС (в крайнем случае КЛАДР) и ГОСТом транслитерации. Всё остальное - это самодеятельность различных степеней применимости и соответствия.
Никакого стандарта нет. Я сейчас собираю воедино данные из нескольких самопальных баз из разных городов. Базы на MySQL, Oracle, MS SQL. Солянка сборная и безумная. У кого то данные на русском языке, у кого то на латинице. После объединения буду переводить на стандартный кладр.

С запросом помог коллега, вопрос отпал.
SELECT Address, IF(Address LIKE '%...%',1,0) + IF(Address LIKE '%Tihonova%',1,0) + IF(Address LIKE '%21%',1,0) AS cou FROM `Filials` ORDER BY cou DESC LIMIT 1
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875582
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey_privacyПосле объединения буду переводить на стандартный кладр.Лучше сразу ФИАС . КЛАДР, конечно, ещё просуществует не один год - но он уже объявлен устаревшим и поддерживаемым исключительно для обеспечения обратной совместимости.

sergey_privacyСолянка сборная и безумная. У кого то данные на русском языке, у кого то на латинице. После объединения буду переводить
Разумнее пойти по пути установления соответствий. Т.е. для каждой базы и каждой записи в ней, если алгоритм автостандартизации не сработал, вносить соотв. запись в базу нестандартных соответствий.
Во-первых, это позволит в будущем больше никогда не обрабатывать ЭТУ запись - ей уже найдено соответствие, и в любой момент оно может быть взято и использовано в обработке.
Во-вторых, накопленый массив нестандартных соответствий позволит выполнить анализ и уточнить алгоритм автостандартизации. Одновременно этот массив может использоваться как проверочная база качества уточнения алгоритма автостандартизации.
...
Рейтинг: 0 / 0
Поиск адреса по отдельным словам
    #38875589
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergey_privacyС запросом помог коллега, вопрос отпал.
SELECT Address, IF(Address LIKE '%...%',1,0) + IF(Address LIKE '%Tihonova%',1,0) + IF(Address LIKE '%21%',1,0) AS cou FROM `Filials` ORDER BY cou DESC LIMIT 1

А нафига тебе лишние IF-ы?

Код: sql
1.
2.
3.
4.
5.
SELECT Address
, (Address LIKE '%...%') + (Address LIKE '%Tihonova%') + (Address LIKE '%21%') AS cou 
FROM `Filials` 
ORDER BY 2 DESC 
LIMIT 1
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск адреса по отдельным словам
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]