开发者社区> 问答> 正文

php / Mysql最佳树形结构

我必须建立一棵树,其中将包含约300个节点。该树没有深度限制。因此它可以具有3或15个级别。每个节点可以有无限数量的子代。

优先考虑的是尽可能快地获得完整的树/子树,但有时我也需要添加节点或移动节点,但并不是那么频繁。

我想知道在数据库中存储树的最佳方法以及在php中检索数据(如果可能)的最佳方法。

展开
收起
保持可爱mmm 2020-05-11 16:41:35 436 0
1 条回答
写回答
取消 提交回答
  • 您可以使用嵌套集模型,因为它可以产生非常有效的查询。检出在MySQL中管理分层数据,并阅读称为嵌套集模型的部分。

    如果您使用的是Doctrine之类的ORM,则它包含嵌套集功能。

    它可以是很难对一些把握的嵌套组的概念左和右。我发现使用这些数字作为XML文档中打开/关闭标签的行号的类比,人们发现它更容易掌握。

    例如,以上面的MySQL链接为例:

    +-------------+----------------------+-----+-----+ | category_id | name | lft | rgt | +-------------+----------------------+-----+-----+ | 1 | ELECTRONICS | 1 | 20 | | 2 | TELEVISIONS | 2 | 9 | | 3 | TUBE | 3 | 4 | | 4 | LCD | 5 | 6 | | 5 | PLASMA | 7 | 8 | | 6 | PORTABLE ELECTRONICS | 10 | 19 | | 7 | MP3 PLAYERS | 11 | 14 | | 8 | FLASH | 12 | 13 | | 9 | CD PLAYERS | 15 | 16 | | 10 | 2 WAY RADIOS | 17 | 18 | +-------------+----------------------+-----+-----+ 如果使用lft,rgt字段并将其用作XML文档的行号,则会得到:

    1. </mp3 players>
    2. </cd players>
    3. <2 way radios>
    4. </2 way radios>
    5. </portable electronics>
    6. 以这种方式查看它可以使某些人更容易可视化嵌套集的层次结构。它还使这种方法提高效率的原因更加明确,因为它可以选择整个节点而无需多个查询或联接。来源:stack overflow
    2020-05-11 16:41:45
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载

相关镜像