Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > Вывод дерева


Автор: tishaishii 15.7.2010, 07:58
Как вывести всё дерево: TREE(ID, ID_PARENT)?

Автор: Gluttton 15.7.2010, 08:20
http://forum.vingrad.ru/forum/topic-276790/view-all.html, возможно поможет.

Автор: Frees 15.7.2010, 10:51
Код

CREATE PROCEDURE GET_TREE (
    PARENTID INTEGER)
RETURNS (
    TREE_ID INTEGER,
    PARENT_ID INTEGER
    NAME VARCHAR(50))
AS
BEGIN
  FOR SELECT T.TREE_ID, T.PARENT_ID, T.NAME
  FROM TABLE_TREE T
  WHERE ((T.PARENT_ID IS NULL) AND (:PARENTID IS NULL)) OR (T.PARENT_ID = :PARENTID)
  ORDER BY T.NAME
  INTO :TREE_ID, :PARENT_ID, :NAME
  DO BEGIN
     SUSPEND;
     /* Рекурсия для каждого листочка */
     FOR SELECT R.TREE_ID, R.PARENT_ID, R.NAME
     FROM GET_TREE( :TREE_ID ) R
     INTO :TREE_ID, :PARENT_ID, :NAME
     DO BEGIN
       SUSPEND;
     END
  END
END


получить все дерево запросом

Код

SELECT * 
FROM GET_TREE(NULL)

Автор: tishaishii 24.7.2010, 17:04
Спасибо.
Уточняю: вывести всё дерево, если имеется значение TREE.ID, которое не обязательно является корнем дерева.

Автор: Akella 25.7.2010, 15:20
можно использовать спец. компоненты, например дерево из DevExpress или вот эти - http://forum.vingrad.ru/topic-238823.html

Автор: tishaishii 29.7.2010, 15:29
Меня GUI не интересует. На выходе будет RDF.
Интересует подход работы с деревом с учётом особенностей FB, конкретно: один вывод и тот же вывод вне зависимости, на входе корневой или дочерний узел.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)