我有一个父子层次结构,如图所示。顶部有一个总部作为母公司。其他节点是子分支。
可以有任意数量的区域区域,并且可以将任意数量的区域区域添加到区域区域。类似地,可以将任意数量的子分支添加到分区。在这里,在所有级别提供用户登录,并且我在向仅显示当前登录用户分支的子分支时遇到困难。我正在使用的数据库是'Postgresql8.4'。通过谷歌搜索我发现recursion
可以完成。但坦率地说,我不理解大多数人所遵循的步骤。那么有人可以帮助我解决这个难题,并解释所遵循的步骤吗?
User Table
============
usr_id; //Unique id of user
usr_branch_id; //Id from the branch table
Branch Table
============
branch_id; //Unique id of branch
branch_text_id;
branch_name;
branch_parent;
答案 0 :(得分:1)
WITH RECURSIVE branch_tree AS (
select branch_id, branch_text_id, branch_name, branch_parent,
branch_id::text as path
from branch
where branch_parent is null
union all
select b.branch_id, b.branc_text_id, b.branch_name, b.branch_parent,
t.path || ',' || b.branch_id::text
FROM branch b
JOIN branch_tree t ON b.parent_id = t.branch_id
)
SELECT * FROM branch_tree ORDER BY string_to_array(path, ',')::int[];