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

WBOY
Libérer: 2016-08-04 09:21:34
original
1079 Les gens l'ont consulté

需要做一个三级返利的项目,需求是能查看某人的一级、二级和三级用户并可以更改这个人的上级,数据结构是开始是这样设计的:
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等。

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!