三级返利系统的数据结构?修改和查询问题

WBOY
发布: 2016-08-04 09:21:34
原创
1115 人浏览过

需要做一个三级返利的项目,需求是能查看某人的一级、二级和三级用户并可以更改这个人的上级,数据结构是开始是这样设计的:
uid 1 2 3
用户id 所属上级 所属上上级 所属上上上级
1 0 0 0
2 1 0 0
3 2 1 0
4 3 2 1
5 4 3 2
6 3 2 1

用户1的上级为平台 ,上三级都是0, 用户6的上级是用户3,上上级是2,上上上级是1,这样的结构是方便查询了,但是修改默认的上级的话,如果这个人的下级有10万人,那这10万人的上上级也需要修改,那修改量就太大了。
如果改成:
uid 1
用户id 所属上级
1 0
2 1
3 2
4 3
5 4
6 3
那查询这个用户向下数第三级的所有用户,需要先查询用户的所有第二级用户,再查询所有第二级用户的所有下级,这样的查询量也是很大。
想咨询一下大家有什么折中的办法吗?

回复内容:

需要做一个三级返利的项目,需求是能查看某人的一级、二级和三级用户并可以更改这个人的上级,数据结构是开始是这样设计的:
uid 1 2 3
用户id 所属上级 所属上上级 所属上上上级
1 0 0 0
2 1 0 0
3 2 1 0
4 3 2 1
5 4 3 2
6 3 2 1

用户1的上级为平台 ,上三级都是0, 用户6的上级是用户3,上上级是2,上上上级是1,这样的结构是方便查询了,但是修改默认的上级的话,如果这个人的下级有10万人,那这10万人的上上级也需要修改,那修改量就太大了。
如果改成:
uid 1
用户id 所属上级
1 0
2 1
3 2
4 3
5 4
6 3
那查询这个用户向下数第三级的所有用户,需要先查询用户的所有第二级用户,再查询所有第二级用户的所有下级,这样的查询量也是很大。
想咨询一下大家有什么折中的办法吗?

mysql 外键+递归

建议采用第二种方案,只保留uid和pid两个字段,这样从设计上支持任意级别的关系,如果有更新的话修改的记录数也会比较少。
多级查询,可以通过各数据库的递归查询语法来简化实现方式,如oracle中的CONNECT BY语句,或SQLSQLER的CTE等。

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!