1
nicolassggsuper OP 编辑时,点击太快,发布出来了。 求指点
|
2
sunjiayao 2020-02-28 09:26:08 +08:00
前段时间刚做过一个。最后实现的大概思路是,先使用闭包表建立关系方便查询下线,订单表使用两张,一张原始订单记录,一张存储父子级关系与步长。
|
3
absolutely 2020-02-28 09:26:38 +08:00
无限极?
|
4
sunjiayao 2020-02-28 09:29:21 +08:00
|
5
nicolassggsuper OP @absolutely 可能是 10 级
|
6
reus 2020-02-28 09:41:25 +08:00
超过三级就是传销,要进去的,小心了
|
7
reus 2020-02-28 09:44:14 +08:00 1
@nicolassggsuper 10 级? 3 级都算擦边球了,之前封了一大批,10 级就是明送,如果你不是老板,赶紧跑路。
|
8
nicolassggsuper OP @sunjiayao 我们不涉及到佣金分红,感谢提醒。请问: 上下级步长 指的是? 如果 LV5 购买了 1 一个订单,上级是 LV4,那么 第二张订单保重存储几条记录? 上下级步长是几?
|
9
nicolassggsuper OP @reus 我们不涉及到佣金分红,谢谢
|
10
sunjiayao 2020-02-28 09:56:58 +08:00
@nicolassggsuper #8 就是第几级下线的意思。如果你们需要记录十级(含)下线的订单关系,那所谓的步长最大就是 10。
当 LV5 购买一个订单时。在创建原始订单后,要将其和其所有上级分别生产一条记录订单(数据量可能比较大,但没关系)。 即为: LV1 | LV5 LV2 | LV5 . . . . |
11
nicolassggsuper OP @sunjiayao 明白了,感谢,非常感谢!
|
12
mjVtb96d2bap2u3Z 2020-02-28 10:49:02 +08:00
@sunjiayao 如果涉及到上下级关系中途变更的,怎么处理比较好?
|
13
optional 2020-02-28 11:05:55 +08:00
树形结构有两种实现方式,
一种是 parent_id 方式存储, 这个可以用 cte 递归查询实现 一种是 path 前缀树方式存储, 查询直接 like prefix%就行。 前者调整灵活但是查询效率低,后者查询效率高但是灵活性少一点,实现的时候也可以两种都实现,在修改 parent_id 的时候同时保存前缀。 |
14
troycode 2020-02-28 11:19:59 +08:00
存储过程来读吧
|
15
DoubleShut 2020-02-28 11:23:25 +08:00
同 13 楼,两种方式都实现
|
16
luckyrayyy 2020-02-28 11:32:00 +08:00
是否可以直接缓存一个全体人员关系树?到时候能直接取到所有下级子树的 id。
|
17
nicolassggsuper OP @luckyrayyy 人员关系树缓存不是问题,按照 @optional 的方式也可以。 但最终需要的获取具体订单的性能
|
18
luckyrayyy 2020-02-28 11:39:25 +08:00
@nicolassggsuper 你的问题是最后怎么读这么多订单?这不是得分页么
|
19
sampeng 2020-02-28 13:13:01 +08:00 via iPhone
不要用 parentid 的方式。用二叉树实现。无限分类
|
20
yikyo 2020-02-28 13:39:06 +08:00
数据库读多写少的树型结构,可用左右值模式,限制只能有一个根。
|
21
HonoSV 2020-02-28 14:09:02 +08:00
mark,我现在这个项目也是做分销。13 楼提到的 parentId 和 path 方式都有用到。
|
22
jayin 2020-02-28 14:16:21 +08:00
上面的做法我都想过,也实践过。最后做法是,维护一个关系表 relation 表,记录用户 A 的所有下级用户 ID+用户层级。维护这个表是复杂点,但是各种查询性能快、简单。
|
23
nicolassggsuper OP |
24
nicolassggsuper OP @jayin 你这种思路是可行的,并且效率能接受
|
25
HonoSV 2020-02-28 14:32:39 +08:00
@nicolassggsuper 我们只用在 user 表上,所以订单展示要联一次表,因为用户量不大,所以还没啥性能问题。。。mark 也是看看还有没有更好的方案。
|
26
sun019 2020-02-28 14:41:21 +08:00
无限极分类吧 13 楼说的第一种
|
27
keepsmilence 2020-02-28 14:43:24 +08:00
现在习惯设计关系表是都有 parent_id 和 parent_ids ( path )两个字段,parent_id 记录所属上级 id,parent_ids 从所属上级记录读取它的 parent_ids 后追加上级 id,逗号分隔;如果需要修改关系,修改后从新的关系更新 parent_ids ;之后查询就像上面那样,用「 like ,XXX,%」查询出所有下级 id (注意加了前后逗号,避免通配)后再用 id 集合查出订单;
|
28
keepsmilence 2020-02-28 14:47:47 +08:00
噢,还有,如果任意一级更新了 parent_id,除了要从他的上级继承 parent_ids 之外,还要有个触发机制更新所有下级的 parent_ids
|
29
optional 2020-02-28 14:55:05 +08:00
@nicolassggsuper 当然是用户了,订单上有需要去 join 啊
|
30
doublleft 2020-02-28 16:11:03 +08:00
在前段用点击触发下钻可以么,节省很多
|