|
|
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
Я не придумал, где нужно опубликовать этот вопрос, поэтому решил тут, поскольку БД Oracle. Есть информационная система, в которую интегрирован КЛАДР таким образом: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Есть EAV-таблица атрибутов клиентов и один из атрибутов address_id ссылается как раз на BM_ADDRESS_OBJECT.ADDRESS_OBJECT_ID. Структуру адреса я достаю таким образом: Код: plsql 1. 2. 3. 4. 5. Визуально результат вполне понятный: ADDRESS_OBJECT_IDADDRESS_OBJECT_TYPE_IDPARENT_OBJECT_IDNAMEKLADR_CODEPARENT_KLADR_CODEADDRESS_OBJECT_TYPE_ID_1SHORT_NAMENAME_1KLADR_CODE_1PARENT_KLADR_CODE_1ADDRESS_LEVEL108432191613121019451кв.Квартира-173121019593265935123xx00000100000yy0004xx00000100000yy593ДОМДом601626593518310070Первомайскаяxx00000100000yyxx000001000183улУлица52951007042010068Первомайскxx000001000xx000000000420гГород301310068409Субъектxx000000000409Суб.Субъект1061 Мне нужно из этого адреса извлечь населенный пункт (город), улицу и номер дома. Но я с КЛАДР особо не работал и не знаю, как в нем структурирована информация. Могу ли я ориентироваться на ADDRESS_LEVEL? Или уровень вложенности адреса не является фиксированным и нужно ориентироваться на наименования типа объектов? И второй вопрос — не поможете составить запрос, чтобы сразу извлечь нужные значения адресных фрагментов (город, улица, дом), не строя полную иерархию и извлекая из нее фрагменты? Или без вложенного запроса с полной иерархией не обойтись? В идеале я бы хотел использовать запрос примерно так: Код: plsql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 16:22 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
КЛАДР - классификатор. Вы могли бы с ним уверенно работать вообще без "деревяшек", на одних лайках, если освоите маску "_" (любой символ). И (когда я много-много лет назад это делал) это реально упрощает все дело. К огромному сожалению, КЛАДР - ВСЁ. с 1 января этого года больше не поддерживается. Теперь только ФИАС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 18:30 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
В EAV хранится не идентификатор КЛАДР, а идентификатор на справочник адресов, который создается из КЛАДР, но без позиционной символьной привязке. Поэтому like тут не применим, необходим именно рекурсивный запрос. Вопрос в том, фиксированы ли в КЛАДР уровни адресных объектов. То есть всегда ли 5 это улица или в некоторых случаях у улиц могут быть другие уровни? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 19:16 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
Никак не соображу, как задать правильный запрос. Вот запрос, который отбирает список нужных клиентов и для каждого из них получает ссылку на адрес в КЛАДР: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. Вот рекурсивный запрос, который возвращает цепочку адресных фрагментов из КЛАДР для одного конкретного клиента: Код: plsql 1. 2. 3. 4. 5. Я хочу получить цепочки адресных фрагментов не для одного клиента, а для всех клиентов из первой выборки. Но не пойму, как это сделать. Такой запрос возвращает список нужных клиентов и нижний уровень КЛАДР (квартиры или дома). Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Как мне из него построить цепочку адресных фрагментов? Такой запрос неверен: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. А такой возможно и верен, но его завершения я не дождался: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. В принципе в выборке будет не очень много строк (сотни, может быть тысячи), поэтому наверное возможна и построчная обработка на клиентской стороне, но если это можно сделать в SQL, то хотелось бы именно так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 19:52 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
Alibek B.всегда ли 5 это улица Улицы в КЛАДР идут отдельной таблицей, это всегда 5-й уровень. Вот тут найдете доку официальную: https://www.gnivc.ru/inf_provision/classifiers_reference/kladr/ Но все зависит от того, как переложили КЛАДР на ваши структуры, к примеру, есть города-субъекты федерации, что уже дает некоторую свободу интерпретации. А с некоторого времени КЛАДР формируется из ФИАС, в котором этих уровней... Не говоря о двух видах деления (административно-территориальное и муниципальное). Так что все, что выше улицы - вообще говоря, вопрос :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 20:00 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
Alibek B.В принципе в выборке будет не очень много строк (сотни, может быть тысячи), поэтому наверное возможна и построчная обработка на клиентской стороне, но если это можно сделать в SQL, то хотелось бы именно так. Да по-всякому возможно. Под UI проще всего идти от самого детального кода деревяшкой вверх по иерархии, собирая и затем инвертируя цепочку connect_by_root - это ежели приспичило болтаться именно иерархией (у Вас же в явном виде присутствует код КЛАДР, нафига лишние извращения-то?). Сюда же - рекурсивный with и/или, если очень хочется, латерал. Можно функцией вида "дай мне адресную строку по коду" оформить и сбросить этот головняк. Под пакетные операции (типа сформировать толстую пачку квитанций) проще завести "в материале" развернутую иерархию и просто на нее соединять. Только ее обновлять надо по факту обновления самого КЛАДР (если они еще вообще будут). Выполнить можно как велосипедом, так и mat. view. Еще вариант под пакетные задания вида "собрать клиентов по ул. Первомайской" - динамически разворачивать интересующее поддерево с материализацией во with и соединять на нее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 20:11 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousВот тут найдете доку официальную: https://www.gnivc.ru/inf_provision/classifiers_reference/kladr/ О, спасибо. Раньше с КЛАДР особо сталкиваться не приходилось, не знал, где искать описание. В моей информационной системе иерархическая структура КЛАДР почти не поменялась, поэтому документация вполне применима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 20:33 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousЕще вариант под пакетные задания вида "собрать клиентов по ул. Первомайской" - динамически разворачивать интересующее поддерево с материализацией во with и соединять на нее. Мне нужно полученную выборку сгруппировать в двухуровневую структуру, где на первом уровне будет город или населенный пункт, а на втором уровне улица и номер дома. В явном виде код КЛАДР у меня есть в самом адресном справочнике, однако в атрибутах клиентов указанный address_id это не код КЛАДР. И напрямую получить из него код КЛАДР нельзя, нужно "подняться" хотя бы до уровня 6 (дома). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 20:40 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousПод UI проще всего идти от самого детального кода деревяшкой вверх по иерархии, собирая и затем инвертируя цепочку connect_by_root А как именно это делается? Если строить иерархию снизу вверх, то ведь у меня нет явного признака "начало цепочки". Таким признаком может быть только наличие атрибута address_id, но при попытках перечислить их в предложении start with AO.ADDRESS_OBJECT_ID in (select address_id from ... ) запрос у меня зависает (по истечению часа так и не завершился). Если строить иерархию сверху вниз, то начало цепочки найти будет проще, но тогда нужно строить дерево по всем адресам, которых в справочнике очень много, а затем уже полученное дерево соединять с выборкой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2018, 20:48 |
|
||
|
Вопрос по КЛАДР
|
|||
|---|---|---|---|
|
#18+
Alibek B.andrey_anonymousПод UI проще всего идти от самого детального кода деревяшкой вверх по иерархии, собирая и затем инвертируя цепочку connect_by_root А как именно это делается? Если строить иерархию снизу вверх, то ведь у меня нет явного признака "начало цепочки". Таким признаком может быть только наличие атрибута address_id, но при попытках перечислить их в предложении start with AO.ADDRESS_OBJECT_ID in (select address_id from ... ) запрос у меня зависает (по истечению часа так и не завершился). Под задачи UI - обычно имеется ввиду единичные поиски. Тогда start with естественным образом формулируется как AO.ADDRESS_OBJECT_ID = ВашОбъект.address_id ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.07.2018, 12:42 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=106&tid=1883674]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
104ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 373ms |

| 0 / 0 |
