0

0

数据结构 - php 对 mysql 数据库遍历的问题

php中文网

php中文网

发布时间:2016-12-01 01:27:59

|

1696人浏览过

|

来源于php中文网

原创

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

比如,代理级别分:金、银、铜三级,我现在是金牌代理a,同时我发展了银牌代理b、c、d,银牌代理b发展了铜牌代理e、f,如图:
a的下级代理列表
╦═══════

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

问题:

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


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


遍历

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

回复内容:

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

比如,代理级别分:金、银、铜三级,我现在是金牌代理a,同时我发展了银牌代理b、c、d,银牌代理b发展了铜牌代理e、f,如图:
a的下级代理列表
╦═══════

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

立即学习PHP免费学习笔记(深入)”;

问题:

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


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


遍历

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

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

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

DESTOON B2B网站管理系统
DESTOON B2B网站管理系统

DESTOON B2B网站管理系统是一套完善的B2B(电子商务)行业门户解决方案。系统基于PHP+MySQL开发,采用B/S架构,模板与程序分离,源码开放。模型化的开发思路,可扩展或删除任何功能;创新的缓存技术与数据库设计,可负载千万级别数据容量及访问。

下载

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

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

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

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

树结构 无限极分类

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

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

1

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

5

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

30

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

3

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

2

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

Excel 教程
Excel 教程

共162课时 | 10.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号