请教多级分销,取下级和下下,下下下级...获取订单思路

2020-02-28 09:10:46 +08:00
 nicolassggsuper
现有账户表 t_user,订单表 t_order ,两张表通过 userid 关联。
t_user 内部有上下级关系 级别 LV1 LV2 LV3... LVn

需求:LV1 可以看到 lv2 级 lv2 所有下级,下下级的订单信息,其他级别以此类推;
备注:lv1 的 lv2 级别用户可能有多个

目前解决方式: 获取 lv1 得所有 lv2 级 lv2 所有下级,下下级的...用户的 userid,然后取 t_order 表中查找( select * from t_order where uid in (***,****,***))

问题:数据量小得化,系统还能扛得住,假设 lv2 级别得用户有 1W,感觉紧紧一个查询,数据库就吃不消。


请教这种情况改怎么破?
3779 次点击
所在节点    问与答
30 条回复
nicolassggsuper
2020-02-28 09:18:47 +08:00
编辑时,点击太快,发布出来了。 求指点
sunjiayao
2020-02-28 09:26:08 +08:00
前段时间刚做过一个。最后实现的大概思路是,先使用闭包表建立关系方便查询下线,订单表使用两张,一张原始订单记录,一张存储父子级关系与步长。
absolutely
2020-02-28 09:26:38 +08:00
无限极?
sunjiayao
2020-02-28 09:29:21 +08:00
@sunjiayao #2 自动发布了
第二张订单表字段大概可以设计为
订单 id | 购买用户 id | 上线 id | 上下级步长 | 若有佣金也可以存该表
另外提醒一下:佣金分红超过三级违法哦
nicolassggsuper
2020-02-28 09:40:59 +08:00
@absolutely 可能是 10 级
reus
2020-02-28 09:41:25 +08:00
超过三级就是传销,要进去的,小心了
reus
2020-02-28 09:44:14 +08:00
@nicolassggsuper 10 级? 3 级都算擦边球了,之前封了一大批,10 级就是明送,如果你不是老板,赶紧跑路。
nicolassggsuper
2020-02-28 09:46:08 +08:00
@sunjiayao 我们不涉及到佣金分红,感谢提醒。请问: 上下级步长 指的是? 如果 LV5 购买了 1 一个订单,上级是 LV4,那么 第二张订单保重存储几条记录? 上下级步长是几?
nicolassggsuper
2020-02-28 09:46:49 +08:00
@reus 我们不涉及到佣金分红,谢谢
sunjiayao
2020-02-28 09:56:58 +08:00
@nicolassggsuper #8 就是第几级下线的意思。如果你们需要记录十级(含)下线的订单关系,那所谓的步长最大就是 10。
当 LV5 购买一个订单时。在创建原始订单后,要将其和其所有上级分别生产一条记录订单(数据量可能比较大,但没关系)。
即为:
LV1 | LV5
LV2 | LV5
.
.
.
.
nicolassggsuper
2020-02-28 10:01:10 +08:00
@sunjiayao 明白了,感谢,非常感谢!
mjVtb96d2bap2u3Z
2020-02-28 10:49:02 +08:00
@sunjiayao 如果涉及到上下级关系中途变更的,怎么处理比较好?
optional
2020-02-28 11:05:55 +08:00
树形结构有两种实现方式,
一种是 parent_id 方式存储, 这个可以用 cte 递归查询实现
一种是 path 前缀树方式存储, 查询直接 like prefix%就行。
前者调整灵活但是查询效率低,后者查询效率高但是灵活性少一点,实现的时候也可以两种都实现,在修改 parent_id 的时候同时保存前缀。
troycode
2020-02-28 11:19:59 +08:00
存储过程来读吧
DoubleShut
2020-02-28 11:23:25 +08:00
同 13 楼,两种方式都实现
luckyrayyy
2020-02-28 11:32:00 +08:00
是否可以直接缓存一个全体人员关系树?到时候能直接取到所有下级子树的 id。
nicolassggsuper
2020-02-28 11:36:15 +08:00
@luckyrayyy 人员关系树缓存不是问题,按照 @optional 的方式也可以。 但最终需要的获取具体订单的性能
luckyrayyy
2020-02-28 11:39:25 +08:00
@nicolassggsuper 你的问题是最后怎么读这么多订单?这不是得分页么
sampeng
2020-02-28 13:13:01 +08:00
不要用 parentid 的方式。用二叉树实现。无限分类
yikyo
2020-02-28 13:39:06 +08:00
数据库读多写少的树型结构,可用左右值模式,限制只能有一个根。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/648220

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX