powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Иерархическая структура данных, что посоветуете?
6 сообщений из 6, страница 1 из 1
Иерархическая структура данных, что посоветуете?
    #34570784
Jevgeniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть БД. В некой таблице client организована иерархическая структура при помощи полей ID, PID, LEVEL. Получается таким образом дерево, причем не бинарное, а количество потомков может быть достаточно велико.

Нужно вывести всех потомков для определенного родителя. Какие будут идеи?

Буду очень рад всякого рода исходникам :). Спасибо.
...
Рейтинг: 0 / 0
Иерархическая структура данных, что посоветуете?
    #34570792
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Написать запрос с использованием "CONNECT BY"
...
Рейтинг: 0 / 0
Иерархическая структура данных, что посоветуете?
    #34570813
Jevgeniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно поподробне пожалуйста, первый раз такое встречаю.

Знаю можно вывести прямых потомков каждого узла, а дальше - использовать рекурсию.
Еще можно одним запросом считывается все узлы, строить мэп PID=>ID и дальше опять же рекурсия. Но как реализовать не знаю. :(
...
Рейтинг: 0 / 0
Иерархическая структура данных, что посоветуете?
    #34572845
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
есть реализации бд-зависимые и относительно бд-независимые.
...
Рейтинг: 0 / 0
Иерархическая структура данных, что посоветуете?
    #34573067
Jevgeniy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот как делал на фокс про

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
&&Для реализации данного отчета необходимо было создать рекурсивную функцию:

Function p_add
PROCEDURE P_ADD 
lparameters _PID
local _cur
 _cur=sys( 2015 )
 select * from __CLIENT where pid=_PID into cursor (_cur)
 scan
  INSERT INTO tmpTable (ind_num,p_ind_num,SURNAME,NAME,PNAME,LEVEL) Values (&_cur..ind_num,&_cur..p_ind_num,&_cur..SURNAME,&_cur..NAME,&_cur..PNAME,&_cur..LEVEL)
  =P_ADD(ID)
 endscan
 use in (_cur)
RETURN 


&&По запросу выводится список клиентов:
    Create Cursor tmpTable (ind_num Int, p_ind_num Int, Surname C( 20 ), Name C( 20 ), Pname C( 20 ), Level int)
=P_ADD(_ID)
    SELECT tmpTable
    report form report_tree_down preview

При помощи CONNECT BY не получится, т.к. на фокс про нет такой фишки. Вот пробовал:

Код: plaintext
1.
2.
SELECT C.ID FROM CLIENT C;
 START WITH C.ID =  1  CONNECT BY C.ID = PRIOR C.PID;
  ORDER BY ROWNUM DESC

и ругается на 2-ю строчку, а именно на слово START
...
Рейтинг: 0 / 0
Иерархическая структура данных, что посоветуете?
    #34573180
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Иерархическая структура данных, что посоветуете?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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