Я работаю с иерархической моделью данных с рельсами и гемом, называемой 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
Есть ли какие-либо предложения по получению дочерних и внучатых узлов в одном запросе?