Получение детей, внуков в иерархической структуре - PullRequest
0 голосов
/ 24 февраля 2019

Я работаю с иерархической моделью данных с рельсами и гемом, называемой ltree_hierarchy (https://github.com/cfabianski/ltree_hierarchy). В этом каждый узел будет иметь родительский идентификатор (который является непосредственным родителем текущего узла).

         1

     2       3

 4    5    6    7

Иерархическая структура достигается с помощью расширения ltree postgres. В gem ltree_hierarchy родительский элемент и путь будут сохранены.

node       parent        path

  1         NULL         1

  2          1           1.2

  3          1           1.3

  4          2           1.2.4

  5          2           1.2.5

  6          3           1.3.6

  7          3           1.3.7

Я могу получить одноуровневого, родительского и дочернего элементов, используя parent_id изузел. что-то вроде

select * from table where parent_id = 1; # for getting the children of a node 1

select * from table where parent_id = 1 and id !=2; # for getting the sibling of a node 2

Есть ли какие-либо предложения по получению дочерних и внучатых узлов в одном запросе?

1 Ответ

0 голосов
/ 24 февраля 2019

Поскольку вы используете postgres 'LTREE внизу - вы можете запросить его напрямую (см. документация postgres ), например

 select * from table where path ~ '1234.*{1,2}'

(здесь 1234 - идентификатор родителяи *{1,2} указывает на соответствие как минимум одному уровню и не более 2)

...