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

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,感觉紧紧一个查询,数据库就吃不消。


请教这种情况改怎么破?
3653 次点击
所在节点    问与答
30 条回复
HonoSV
2020-02-28 14:09:02 +08:00
mark,我现在这个项目也是做分销。13 楼提到的 parentId 和 path 方式都有用到。
jayin
2020-02-28 14:16:21 +08:00
上面的做法我都想过,也实践过。最后做法是,维护一个关系表 relation 表,记录用户 A 的所有下级用户 ID+用户层级。维护这个表是复杂点,但是各种查询性能快、简单。
nicolassggsuper
2020-02-28 14:17:29 +08:00
@optional @HonoSV parentId 和 path 方式用在用户关系设计上?还是订单上也用到了这种关系?
nicolassggsuper
2020-02-28 14:18:37 +08:00
@jayin 你这种思路是可行的,并且效率能接受
HonoSV
2020-02-28 14:32:39 +08:00
@nicolassggsuper 我们只用在 user 表上,所以订单展示要联一次表,因为用户量不大,所以还没啥性能问题。。。mark 也是看看还有没有更好的方案。
sun019
2020-02-28 14:41:21 +08:00
无限极分类吧 13 楼说的第一种
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 集合查出订单;
keepsmilence
2020-02-28 14:47:47 +08:00
噢,还有,如果任意一级更新了 parent_id,除了要从他的上级继承 parent_ids 之外,还要有个触发机制更新所有下级的 parent_ids
optional
2020-02-28 14:55:05 +08:00
@nicolassggsuper 当然是用户了,订单上有需要去 join 啊
doublleft
2020-02-28 16:11:03 +08:00
在前段用点击触发下钻可以么,节省很多

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

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

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

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

© 2021 V2EX