29 / 29 / 8
Регистрация: 28.01.2013
Сообщений: 211
|
|
1 | |
Приблизительное значение SELECT15.11.2013, 14:10. Показов 957. Ответов 12
Метки нет (Все метки)
Доброе время суток, подскажите пожалуйста решение проблемы:
Есть таблица в БД имеющая вид: Например такая запись: Улица | Дом | Участок. улица Лесная | 26 | 13 На входе у меня такая строка например: "г.Петрозаводск, ул.Лесная, д.26, кв.17, 185000". Нужно каким то образом по этой строке сделать SELECT столбца "Участок", т.е чтобы я получил результат = 13. Пробовал через LIKE и т.д но нужно все равно указывать слишком близкое к правильному значение. P.S. Заранее всем спасибо. Очень нужно решить данную проблему. Может есть какой-то алгоритм, чтобы строку разбить на состовляющие: улица, дом и тд.
0
|
15.11.2013, 14:10 | |
Ответы с готовыми решениями:
12
Приблизительное значение SELECT Приблизительное значение приблизительное значение cos(x) Приблизительное значение числа |
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||||||
15.11.2013, 15:44 | 2 | |||||
используйте регулярные выражения для извлечения отдельных данных из строки.
надеюсь, что у вас нет записей типа "улица Лесная" "ул Лесная" "ул. Лесная" "ул.Лесная" потому что тогда оочень сложно найти необходимые данные. у меня была похожая задача вот кусок кода:
city - полное название города ct - тип города cn - имя города street - полное название улицы st - тип улицы sn - имя улицы h - номер дома sub - дробь дома l - буква дома k - корпус f - квартира Добавлено через 1 минуту в результате где-то одна сотая процента не вылавливается из списка из-за нетривиальных названий или грубых ошибок набора
1
|
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
|
|
15.11.2013, 16:16 | 3 |
Суда по тому, как вы написали вопрос. у вас строка всегда одна, и результат по этой строке должен получиться тоже один. Таким образом у меня есть 2 варианта:
1. Вычленить номер дома, поделить на 2 и, вуаля, мы получили 13; 2. Проигнорировать обозначению строку, а сделать просто SELECT 13. А если серьезно, то далеко не все участники форума знают административное устройство города Петрозаводска. Поэтому, для ясности. вам нужно пояснить, каким образом можно понять, что адрес "г.Петрозаводск, ул.Лесная, д.26, кв.17, 185000" относится к 13-му участку.
0
|
29 / 29 / 8
Регистрация: 28.01.2013
Сообщений: 211
|
|
15.11.2013, 16:23 [ТС] | 4 |
в этом-то и вся проблема...
Просто есть база с этими участками, а от заказчика приходит список адресов, который нужно запихнуть в базу и присвоить каждому свой участок, сравнив адрес с тем что в базе...
0
|
1449 / 1121 / 347
Регистрация: 11.04.2011
Сообщений: 2,621
|
|
15.11.2013, 18:00 | 5 |
То есть, есть таблица, где каждому адресу сопоставлен какой то участок. Это уже хорошо.
Так в чем проблема то заключается? Вы не можете распарсить строку с адресом? Выше есть вариант решения этой проблемы. Вы не можете написать запрос к таблице? Ну так вы до сих пор не показали, какова структура этой таблицы ...
0
|
29 / 29 / 8
Регистрация: 28.01.2013
Сообщений: 211
|
|
16.11.2013, 20:08 [ТС] | 6 |
Я показал структуру таблицы. Таблица содержит 3 столбца: Улица, Дом, Участок.
Да, мне нужно распарсить строку на отдельные части: Название улицы и дом отдельно. Чтобы сделать обычный SELECT к базе и выдернуть участок. Буду пробовать с регуляркой которую предоставил Learx. Добавлено через 7 часов 31 минуту А не могли бы вы написать какую-то строку для примера работы вашей регулярки, а то у меня чет не работает, пробовал всяко записывать, но результата нет.
0
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
16.11.2013, 21:43 | 7 |
Если строчки вводятся руками, то есть ненулевая вероятность, что на каких-то записях регулярка сломается.
Правильным было бы сделать БД хотя бы чуть более реляционной - таблица для улиц, таблица для домов, ссылающаяся на таблицу улиц, таблица для корпусов, таблица для адресов, состоящая не из строчек а из полей, ссылающихся на поля других таблиц, таблица участков, ссылающаяся на таблицу домов. Иначе вы потонете в этих данных.
1
|
29 / 29 / 8
Регистрация: 28.01.2013
Сообщений: 211
|
|
18.11.2013, 10:01 [ТС] | 8 |
Вообщем есть небольшое решение проблемы, провел небольшой анализ и выяснил, что все записи имеют вид строки:
Наименование, Улица, Дом, Корпус, Квартира. Написал уже небольшую функцию, которая разбивает эту строку на все эти отдельные элементы. Теперь осталось каждый элемент очистить от лишнего треша (запятых, точек, пробелов) и думаю все будет в 95-98% работать, а остальное можно будет руками подправить.
0
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
18.11.2013, 11:14 | 9 |
Нормальный подход.
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
|
18.11.2013, 11:19 | 10 |
Eclipze, используйте мое регулярное выражение. насколько я помню там аналогичное построение адреса.
только названия на украинском(гурт = общ, б(ьудинок)=дом)
0
|
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
|
|
18.11.2013, 11:24 | 11 |
Только если данных много, то применение функции в селекте тормозить будет. В перспективе всё же имеет смысл подумать об оптимизации структуры БД.
0
|
29 / 29 / 8
Регистрация: 28.01.2013
Сообщений: 211
|
|
18.11.2013, 15:43 [ТС] | 12 |
Я пробовал, но чет не работает регулярка у меня. Напишите пожалуйста пример адреса для этой регулярки, попробую разобраться...
0
|
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
|
||||||
18.11.2013, 19:06 | 13 | |||||
я лучше расспишу что делает моя регулярка а вы уже переделаете под свои нужды.
конструкция ?<name> задает имя группы в выражении
0
|
18.11.2013, 19:06 | |
18.11.2013, 19:06 | |
Помогаю со студенческими работами здесь
13
Вычислить приблизительное значение функции Вычислить приблизительное значение бесконечной суммы Посчитать приблизительное значение функции sin по заданной формуле Как изменить значение одного select-а при изменении другого select-а? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |