表示在PHP中使用的深度树的最佳方法(MySQL / XML /?)

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了表示在PHP中使用的深度树的最佳方法(MySQL / XML /?)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在重写一个应用程序,教师可以在线计划课程.

该应用程序指导教师完成为学生创建工作单元的过程.该工具目前在三个州使用,但我们计划比这更大.

该应用程序的主要绘图卡之一是所有学生成果都预先加载到系统中.这允许教师搜索或浏览并选择在每个工作单元中将满足哪些结果.

当我最初设计系统时,我假设所有学生成绩都遵循类似的层次结构.也就是说,有名为嵌套容器,然后是结果.

我输入的原始结果是三层.因此我的数据库具有以下结构:

=========================

粗体表格

h1

id,名字

H2

id,parent___id(h1_id),名称

H3

id,parent___id(h2_id),名称

结果

id,parent___id(h3_id),名称

=========================

除了显然无法添加n /级别的层次结构之外,此方法还使得在不递归查询数据库的情况下难以显示所有标准的列表.

一旦添加了学生成绩(及其家长类别),就没有理由以任何方式对其进行修改.主要要求是它们易于阅读且高效.

到目前为止,来自不同学校/州/国家的所有学生成绩都大致遵循了我的假设.情况可能并非总是如此.

当然,所有现有数据必须从当前数据库传输.

鉴于上述情况,我存储所有不同学生成绩的最佳方式是什么?我所拥有的一些想法如下所示.

>选择使用recusion或大量连接时,继续使用数据库中的4个表
>使用嵌套集
> XML(所有不同集合的全局XML文件或每个集合的XML文件)

解决方法

我不知道你实际上需要4个表.

如果您有一个跟踪parent_id的表和一个级别,您可以拥有无​​限级别.

您可以使用递归来跟踪任何特定元素的树(您实际上不需要级别,但使用它可以更容易查询).

替代方案是嵌套集.在这种情况下,您仍然会合并到一个表中,但使用set stuff来跟踪级别.

使用哪一个取决于您的应用程序.

读密集型:嵌套集

写密集型:父树式的东西

这是因为对于嵌套集,您可以使用单个查询检索整个树,但每次插入新节点时都需要重新排序整个树.

只跟踪parent_id时,可以单独移动或删除节点.

PS:我对XML投了反对票.您有相同的递归问题,加上解析数据的开销以及将其存储在db或文件系统中(这将导致并发问题).

脚本宝典总结

以上是脚本宝典为你收集整理的表示在PHP中使用的深度树的最佳方法(MySQL / XML /?)全部内容,希望文章能够帮你解决表示在PHP中使用的深度树的最佳方法(MySQL / XML /?)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。