可以考虑下数据嵌套模型 。
简单来说 每个用户都存在一个 left v 和 right v,这两个值来确定层级以及范围关系。
举例来说:
当 A 的 左值: 1 右值: 2 (没有邀请人的状态)
A 这个时候邀请了 B 来看一看这个范围值如何变化
B 节点左值=A.右值
B 节点右值= B.左值+1
最后一步 由于 A 节点插入了一个子节点 需要范围包括 那么 A.右值 = A.右值+2
最终状态就是
A 左值: 1 右值: 4
B 左值: 2 右值: 3
以此类推 。
如果维护起了这套关系 查询子节点信息不需要递归 因为子节点的两边值是一定小于父节点的值 即:
```sql
SELECT * FROM user WHERE lv >
parent.lv and rv < parent.rv
```
再来看下 B 邀请了 C
C 节点的左右值和 B 值获取方式一样。
这里不同的是 你需要更改 A 和 B 节点的右值,当然也不需要递归 你只需要找出 lv >=
C.lv AND rv <
C.lv 然后右值 + 2
最终的状态就是
A 左值: 1 右值: 6
B 左值: 2 右值: 5
C 左值: 3 右值: 4
来查询下 A 一共邀请了多少人?
```
A.右值 / 2 -1 = 2
```
这套模型的关键在于插入和删除 要确保相关的节点值要改变 只要能做到这一点 理论支持无限极分销 并且查询并不需要递归。
希望能帮到你。