会员系统数据结构和算法

会员系统的数据结构和算法,这里主要针对二叉树结构。

表结构

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. 显示分享人的层级结构
  2. 用户自己选择排在哪个空位
  3. 计算空位是否可用

自动排位

  1. 算法1:遍历分享人的层级结构,一级排满时自动查找下一级,参考 PHP二叉树自动排位算法
  2. 算法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。

前后步骤省略。

此结构可扩展至三叉、四叉等有限分叉结构。分叉多时,即是太阳线结构,不存在排位问题。

Leave a Comment

豫ICP备19001387号-1