powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Поиск по древовидному справочнику
4 сообщений из 4, страница 1 из 1
Поиск по древовидному справочнику
    #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
Поиск по древовидному справочнику
    #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
Поиск по древовидному справочнику
    #39765828
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilyuha111если ищу "Сухой" выводиться ...


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

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

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


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