|
|
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
Добрый день! Есть у меня в таблице 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 здесь городить я вообще не понимаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 16:59:45 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
если ты сделаешь SELECT Address FROM Filials WHERE Address LIKE '%Lenina%' AND Address LIKE '%Lenina%' ты из твоего списка получишь только обну запись. если у тебя на входе слово с ошибкой и возвращается 0 записей - нужно вывести сообщение "адресс не существует или проверьте введёное" иначе тебе придется использовать SOUNDEX(str) (что не пробывал и не уверен) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 17:39:31 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
Вадя имел ввиду Код: sql 1. ну либо хотел это сказать но сказал что-то не понятное :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 18:23:47 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
вадя, Вообще ничего не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 18:44:39 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
alex564657498765453, В таблице написание может выглядеть как "Rostov na Donu ul. Krasnih komissarov 25" или "ul. Krasnih komissarov 25 g. Rostov na Donu". Если в таблице первый вариант и передадут "Rostov" "komissarov" "25", то адрес попадет под маску запроса like "%Rostov%komissarov%25%". Но передать могут в обратном порядке или в базе есть записи второго вида, тогда выборка уже не сработает. Диких сочетаний многосложных городов и улиц довольно много, порядок чередования везде разный. Такая маска подойдет максимум в 70% случаев, это очень мало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 18:51:20 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
SELECT Address FROM Filials WHERE Address LIKE '%Lenina%' AND Address LIKE '%236%' гыыы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 19:02:45 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
последний вариант правильный, этих лайков можно добавлять до и больше. но как правило достаточно 4. я такой способ использую уж очень долго, ещё не подводил. к примеру 25 дом на улице ленина в ростове рост 25 лен я уверен в России этому будет соответствовать не больше 5 записей если их вывести в выпадающем списке - то выбрать нужное просто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 19:17:31 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
вадяSELECT Address FROM Filials WHERE Address LIKE '%Lenina%' AND Address LIKE '%236%' гыыы Похоже, что вы не очень внимательно читали условие задачи. В передаваемых данных могут быть опечатки. В этом случае запрос вернет 0 значений. В базе может быть мельчайшее отличие от запроса и результатов на выходе не будет. В базе может быть запись Rostov Lenina 35, в человек запросит Rostov Lenina 35a и опять результат не увидим. Сочетаний очень много, при которых результат не отображается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 20:00:05 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
Rostov Lenina 35a - а кто утвердает, что это опечатка? может чел ищет именно 35а? и в этом случае возврат 0 записей верный результат - ""адресс не существует или проверьте введёное"" третьего не дано для таккого поиска по лайк нет неоходимомсть вводить полные названия можно и части слов, что приведёт к уменьшению опечаток, но к увеличению результатов отбора я не знаю откуда тс получает слова для поиска, поэтому трудно что-то сказать у меня всё вводится в одном поле при каждом введеном символе строка парсится в конструцию like. и делается запрос . поэтому если при вводе очередного символа получается пустой результат - чел сразу видит, что введено нето и нчинает чесать репу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2015, 22:01:27 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
sergey_privacyЕсть у меня в таблице Filials столбец Address со стандартными почтовыми адресами из разных городов в транслите. Всё, что Вы пишете, является всего лишь доказательством простейшего факта - придуманный Вами "стандарт", мягко говоря, далёк от идеального. Стандартные почтовые адреса в транслите - это адреса, полученные в строгом соответствии с ФИАС (в крайнем случае КЛАДР) и ГОСТом транслитерации. Всё остальное - это самодеятельность различных степеней применимости и соответствия. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2015, 09:36:42 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
Слова передаются целиком, без сокращений. Строка приходит вся сразу. Один из вариантов - получение из другой базы русских слов с последующей автоматической транслитерацией. Реальная ситуация: В базе есть адрес Volgograd, Krasniy Oktyabr,Sovetskaya,21 Из другой базы получили КрасныйОктябрь, ул.Советская, 21, 404236 Волгоград Если поиск прошел по словам "Volgograd" AND "Sovetskaya" AND "21", то все нормально. Если ищем "Volgograd" AND "KrasniyOktyabr" AND "Sovetskaya" AND "21" То этот адрес не найдем. Таких ситуаций очень много, их надо отсечь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2015, 09:47:14 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2015, 10:19:56 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
sergey_privacyПосле объединения буду переводить на стандартный кладр.Лучше сразу ФИАС . КЛАДР, конечно, ещё просуществует не один год - но он уже объявлен устаревшим и поддерживаемым исключительно для обеспечения обратной совместимости. sergey_privacyСолянка сборная и безумная. У кого то данные на русском языке, у кого то на латинице. После объединения буду переводить Разумнее пойти по пути установления соответствий. Т.е. для каждой базы и каждой записи в ней, если алгоритм автостандартизации не сработал, вносить соотв. запись в базу нестандартных соответствий. Во-первых, это позволит в будущем больше никогда не обрабатывать ЭТУ запись - ей уже найдено соответствие, и в любой момент оно может быть взято и использовано в обработке. Во-вторых, накопленый массив нестандартных соответствий позволит выполнить анализ и уточнить алгоритм автостандартизации. Одновременно этот массив может использоваться как проверочная база качества уточнения алгоритма автостандартизации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2015, 11:08:01 |
|
||
|
Поиск адреса по отдельным словам
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2015, 11:10:26 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38875002&tid=1833595]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 213ms |
| total: | 372ms |

| 0 / 0 |
