gpt4 book ai didi

php - 从数据库中获取多个级别的子项?

转载 作者:行者123 更新时间:2023-11-29 03:07:56 24 4
gpt4 key购买 nike

我的术语有些欠缺,所以我的问题的标题无疑有点蹩脚,但我会在下面解释我的意思。

我有一个 MySQL 表,如下所示:

categories:

category_id | parent_id

0 0
1 0
2 1
3 1
4 3

现在,我要做的是像这样输出类别结构:

category structure:

0
1 -> 2
3 -> 4

除了需要能够显示类别结构之外,如果选择了一个类别,那么我想找到该类别和子类别中的所有文章(文章将是另一个表,其中每篇文章都有一个 parent_category_id喜欢它所属的类别)。

我能想到的唯一方法是:

  1. 获取parent_id等于被查看类别id的所有类别
  2. 遍历所有结果并重复第一步
  3. 继续这样做,直到检查完所有结果

有更好的方法吗?

最佳答案

一种有效的方法是使用嵌套集。这有点棘手,更新起来也有点复杂。

它是这样工作的:

每个节点都有 2 个 ID 和一个级别。所有子节点 ID 都位于节点 ID 之间。示例:

category_id | parent_id | low_id |  high_id 
0 0 1 2
1 0 3 10
2 1 4 5
3 1 6 9
4 3 7 8

现在你可以说“给我类别 1 的所有子节点”:

select *
from categories
where low_id between 3 /* (low_id node1) */ and 10 /* (high_id node 1) */

但是如果你必须插入一个节点,你需要一个算法来将其他节点移动到正确的位置。也很好存储节点的级别,这样你就不用去寻找id/parent_id关系,你只需要按low_id排序并使用级别作为指标。

如果您使用 php 作为编程语言,则有一个 doctrine2 插件可以处理嵌套集。

编辑:我认为这是一个很好的起点:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/

关于php - 从数据库中获取多个级别的子项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588614/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com