php 对 mysql 数据库遍历的问题

发布于 2022-09-04 01:25:51 字数 644 浏览 17 评论 0

一个关于代理分销系统的算法优化问题

比如,代理级别分:金、银、铜三级,我现在是金牌代理A,同时我发展了银牌代理B、C、D,银牌代理b发展了铜牌代理E、F,如图:
A的下级代理列表
╦═══════

╠═ b
║ ╠══ e
║ ╠══ f
╠═ c
╠═ d
我现在用程序作出上面这样一张例图方法是:(PHP+MYSQL)
先搜索所有上级代理为A的代理,
例如找到了B代理,再搜索所有上级代理为B的代理,本次搜索完毕。
再搜索C代理 …………
以此类推。

问题:

现在代理数据库中有三十万条记录,每个代理都可以在代理分销系统中查看自己的下级代理树,按照以上方法:
每次搜索都要很久,如果某个代理的下级代理有1000个,那就根本显示不出来。


我想到的解决办法是用一个数组存储所有用户关系,然后将这个数组存储为文件,对每次添加删除用户都对这个数组同时进行更新操作,然后把想要的数据从数组遍历出来,然后直接到数据库中执行一个select就可以了。。这种办法可行么,还有什么其他解决方案么


遍历

想从上层会员找其下的底层会员,会用到遍历,目测是三叉树的层次遍历,这个算法,目测会对数据库进行好多好多次的查询。。。太耗费资源了,有没有什么替代方案?缓存?redis?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

混浊又暗下来 2022-09-11 01:25:51

建议分级查询,按需查询数据,一次性显示一个关系树查询次数多,耗资源;
这样的实现可以看无限级分类,使用左右值原理,先序遍历树形结构,与商场的分类同原理

简单气质女生网名 2022-09-11 01:25:51

先检查代理级别建索引了没。

整个树显示出来一个页面也不合适吧,可以做成按需查询。
金牌代理打开页面显示下级的所有银牌代理,点击银牌代理用户再查看他下级的铜牌代理

摇划花蜜的午后 2022-09-11 01:25:51

谢邀,说说我的几个思路吧:

  1. 如果更新不是很频繁的话,使用缓存(数据量30万,估计只能缓存1~2级了),不用每次用SQL查询。

  2. 多次加载,这个楼上也说了,先加载N级的,等点击后,再ajax去请求N+1级的。

窝囊感情。 2022-09-11 01:25:51

树结构 无限极分类

情场扛把子 2022-09-11 01:25:51

自己搜索具体答案吧,这个讲细了很麻烦,大致原理说一下给你。
怎么才能最快的知道谁是自己的下级呢?如果大家来站队的话,满足两个条件即可,1- 你知道谁是第一个,2-保证自己是最后一个 (当然也可以知道谁是最后一个,保证自己是第一个)
根据这个推论为每个节点编上一个合适的序号即可实现快速查找,如 select * from tree where indexNumber >= search.node.min && indexNumber < search.node.indexNumber

最终的表结构类似
id, parent_id(父节点), top_id(根节点,如果有多个树的时候), indexNumber(树内的索引编号,top_id+indexNumber是唯一的), min(已我为基准,谁是本分支下的第一个), level(树高)

对于你的例子应该类似 (括号内第一个数字是索引号,第二个是min,第三个是树高)

            a(6,1,0)
     b(3,1,1)      c(4,4,1)      d(5,5,1)
e(1,1,2) f(2,2,2)

这个结构在节点操作的时候较复杂(比如你在f后面加个g,或者删掉f,那么abcd都需要重新计算序号),但是搜索就非常快了,一般一次搜索就能出结果啦。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文