23 февр. 2012 г.

Канал на YouTube

Александр Назаренко создал канал на YouTube с видео про Ниву и Гедымин.

Кстати, ГИВЦу недавно исполнилось 40 лет.

9 февр. 2012 г.

Путь к элементу дерева

Следующий запрос выводит содержимое справочника товарных групп, причем в колонке path для каждой группы формируется путь к корневому элементу дерева через конкатенцию идентификаторов всех родительских узлов:
WITH RECURSIVE
  group_tree AS (
    SELECT
      CAST('' AS VARCHAR(120)) as path,
      -1 as id,
      -1 as parent,
      CAST('' AS dname) as name
    FROM
      rdb$database

    UNION ALL
    
    SELECT
      IIF(gt.path > '', gt.path || '.', '') || g2.id,
      g2.id,
      g2.parent,
      g2.name
    FROM
      gd_goodgroup g2 JOIN group_tree gt
        ON COALESCE(g2.parent, -1) = gt.id
  )
SELECT
  *
FROM
  group_tree
WHERE
  path > ''
Запрос может быть легко изменен для любого древовидного справочника из базы данных Гедымина.

Если из получаемого пути следует исключить наименование корневой группы, то строку:

  IIF(gt.path > '', gt.path || '.', '') || g2.id,
Следует заменить на:
  IIF(gt.path > '', gt.path || '.', '') || 
    IIF(g2.parent IS NULL, '', g2.id),
Для того, чтобы запрос возвращал только пути элементов для поддерева заданного его корневым узлом, следует заменить первый SELECT в объединении на:
SELECT
  CAST(name AS VARCHAR(120)) as path,
  id,
  parent,
  name
FROM
  gd_goodgroup
WHERE
  id = идентификатор_корня_поддерева