Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск по древовидному справочнику / 4 сообщений из 4, страница 1 из 1
28.01.2019, 11:05
    #39765733
ilyuha111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по древовидному справочнику
Добрый день
имеется задача не могу найти оптимальное решение
есть древовидный справочник и компонент, который отображает его в интерфейсе в виде папок подпапок.
нужно организовать поиск по листам дерева,но в результате поиска выводить и все родительские/дочерние ветки если наименование листа/ветки удовлетворяет критерию поиска
with t as
(select 1 as ids,'ЛС' as n , cast(null as number) pids from dual
union all
select 2 as ids,'простуда' as n ,1 pids from dual
union all
select 3 as ids,'кашель' as n , 2 pids from dual
union all
select 4 as ids,'капли' as n , 2 pids from dual
union all
select 5 as ids,'сухой ' as n , 3 pids from dual
union all
select 6 as ids,'влажный ' as n , 3 pids from dual
)
select n ,
sys_connect_by_path(n, '->') as n_way ,
ids,
pids,
connect_by_isleaf
from t
start with pids is null
connect by prior ids = pids;
n n_way ids pids connect_by_isleaf
ЛС ->ЛС 1 0
простуда ->ЛС->простуда 2 1 0
кашель ->ЛС->простуда->кашель 3 2 0
сухой ->ЛС->простуда->кашель->сухой 5 3 1
влажный ->ЛС->простуда->кашель->влажный 6 3 1
капли ->ЛС->простуда->капли 4 2 1


пример
если ищу "Сухой" выводиться
ЛС ->ЛС 1 0
простуда ->ЛС->простуда 2 1 0
кашель ->ЛС->простуда->кашель 3 2 0
сухой ->ЛС->простуда->кашель->сухой 5 3 1


если "кашель"
ЛС ->ЛС 1 0
простуда ->ЛС->простуда 2 1 0
кашель ->ЛС->простуда->кашель 3 2 0
сухой ->ЛС->простуда->кашель->сухой 5 3 1
влажный ->ЛС->простуда->кашель->влажный 6 3 1

если "капли"
ЛС ->ЛС 1 0
простуда ->ЛС->простуда 2 1 0
капли ->ЛС->простуда->капли 4 2 1
...
Рейтинг: 0 / 0
28.01.2019, 12:37
    #39765802
Anton_Demin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по древовидному справочнику
ilyuha111,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
with t as
 (select 1 as ids, 'ЛС' as n, cast(null as number) pids
    from dual
  union all
  select 2 as ids, 'простуда' as n, 1 pids
    from dual
  union all
  select 3 as ids, 'кашель' as n, 2 pids
    from dual
  union all
  select 4 as ids, 'капли' as n, 2 pids
    from dual
  union all
  select 5 as ids, 'сухой ' as n, 3 pids
    from dual
  union all
  select 6 as ids, 'влажный ' as n, 3 pids
    from dual)
select n,
       sys_connect_by_path(n, '->') as n_way,
       ids,
       pids
  from (select n, ids, pids
          from t
         start with ids = (select ids from t where n = 'кашель')
        connect by prior ids = pids
        union
        select n, ids, pids
          from t
         start with ids = (select ids from t where n = 'кашель')
        connect by prior pids = ids)
 start with pids is null
connect by prior ids = pids;
;
...
Рейтинг: 0 / 0
28.01.2019, 13:04
    #39765828
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по древовидному справочнику
ilyuha111если ищу "Сухой" выводиться ...


как ищете и что неправильно?

.....
stax
...
Рейтинг: 0 / 0
28.01.2019, 13:48
    #39765874
ilyuha111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск по древовидному справочнику
Anton_Demin,

спасибо то что нужно
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск по древовидному справочнику / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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