ltree_hierarchy ( https://github.com/cfabianski/ltree_hierarchy ) と呼ばれるレールと宝石を使用した階層データ モデルを使用しています。各ノードには親 ID (現在のノードの直接の親) があります。
1
2 3
4 5 6 7
階層構造は、postgres の ltree 拡張を使用して実現されます。また、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
単一のクエリでノードの子と孫を取得するための提案はありますか?