背景
在一些复杂的业务场景中,需要维护多级账户矩阵的关系。即多层级的母子账户关系。此时如果账户A1登录后,他需要查询到它下面所有的子账户列表。此时应该如何去做。
假设表结构中,每一条记录均存储parentId的字段,那么通过递归查询,那么就可以将全部的数据都查询出来。
如果n层矩阵的话,大约要递归查询n次
select * from tableA where parentId in ()
思路
我们可以在表中维护一个字段 parent_id_path
,这个字段的目的就是维护目录关系:例如C1的记录维护的是A1,B1,C1
,B1维护的是A1,B1
,A1维护的是A1
如果查询A1的所有子账户,那么查询语句变成了
select * from tableA where parentId like 'A1,%'
通过like查询的特性,快速将所有命中条件的子账户都查询出来。
缺点:因为每一层均维护了目录树的链路
,当矩阵发生替换后,发生替换的每一层节点都需要做出变更。