我正在构建一个具有各种主题的父/子结构的网站。(再多解释一下,它实际上有4个级别,所以:parent < child < 2nd child < 3rd child
)目前我在MySQL中为每个级别都有一个表。每个子项都有一行,该行引用父项的id和主键。我遇到的问题是,我看不出有办法创建一个列表来显示如下所示的子主题:
Food
Fruit
Red
Cherry
Yellow
Banana
Meat
Beef
Pork
我曾考虑过在上使用这样的单个层次表:http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/我知道可以输出这样的列表。
然而,这样做的问题是,该表很容易就有数百万个帖子(假设这已经开始),而每次请求页面时对其进行排序的递归函数似乎需要很长时间才能加载。
虽然我知道这不是一个很好的问答网站,但我想知道是否有人知道雅虎问答是如何存储他们的类别和子类别的,因为这似乎与我需要做的类似。有没有任何网站有一个类别/子类别数据库,任何人都可以提供信息?
如果我想要一个如上所述的列表,我是否必须使用单个层次表(相邻的列表模型或修改的预购树结构),或者我是否可以使用php、sql和javascript来创建一个这样的列表;每个级别的孩子各有4张桌子?
您不需要每个级别的表。您需要基于递归关系的表,该表将允许您创建"n"个级别。
这里有一个简单的概念,考虑一个包含以下字段的表:
id(primary key) - item_name - parent_id(foreign key {default=0})
其中:parent_id引用回相同的表id列。
示例:
id - name - parent_id
1 - ABC - 0
2 - XYZ - 0
3 - ABX - 1
4 - JKK - 1
5 - KHM - 3
6 - KHJ - 5
在这里,ABC处于0级(即他们没有父级),但ABX是KHM的父级,同时也是ABC的子级。