我的术语有点缺乏,所以我的问题的标题无疑是蹩脚的,但我会在下面解释我的意思。
我有一个类似于以下内容的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喜欢它的类别。
我能想到这样做的唯一方法是:
有更好的方法吗?
答案 0 :(得分:1)
以有效的方式执行此操作的一种方法是使用嵌套集。 这有点棘手,更新起来有点复杂。
它的工作原理如下:
每个节点都有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/