会员系统的数据结构和算法,这里主要针对二叉树结构。
表结构
Table:user_node,记录用户的层级关系,包含所有上级和对应的导数。
字段 | 说明 |
---|---|
id | 记录ID |
user_id | 用户ID,同一ID可多次出现 |
pid | 上级ID |
layer | 相对上级的层数 |
share_id | 分享人ID,可能等于pid |
addtime | 添加时间 |
针对二叉树结构多加的一张表
Table:user_sub,记录用户的下两个用户,左排位和右排位。
字段 | 说明 |
---|---|
id | 记录ID |
user_id | 用户ID |
sub_left | 下级左排位用户 |
sub_right | 下级右排位用户 |
手工排位
- 显示分享人的层级结构
- 用户自己选择排在哪个空位
- 计算空位是否可用
自动排位
- 算法1:遍历分享人的层级结构,一级排满时自动查找下一级,参考 PHP二叉树自动排位算法
- 算法2:结构user_sub表快速查找
算法2所需SQL语句
select un.user_id,us.sub_left,us.sub_right from user_node as un left join user_sub as us on un.user_id=us.user_id where (un.pid = '{$share_id}' or un.user_id = '{$share_id}') and (us.sub_left = 0 or us.sub_right = 0) order by un.user_id asc
查询出来的第一个用户即是可用的父级ID。
前后步骤省略。
此结构可扩展至三叉、四叉等有限分叉结构。分叉多时,即是太阳线结构,不存在排位问题。