具有父母和子主题的网站的MySQL结构

时间:2012-08-04 21:01:01

标签: php javascript mysql sql

我正在建立一个拥有各种主题的父/子结构的网站。 (稍微解释一下,它实际上有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/我知道可以输出这样的列表。

然而,问题在于表格可能很容易有数百万个帖子(假设这样做了)以及每次请求页面时对其进行排序的递归函数似乎需要很长时间才能加载。

虽然我认识到这不是一个很棒的问答网站,但我想知道是否有人知道Yahoo Answers如何存储他们的类别和子类别,因为它看起来与我需要做的类似。是否有任何网站具有类别/子类别数据库,任何人都可以提供有关的信息?

如果我想要一个上面的列表,我是否需要单个分层表(相邻列表模型或修改的预订树结构)或者我可以只使用php,sql和javascript来创建类似的列表我现在拥有的;每个级别的孩子都有4个表?

1 个答案:

答案 0 :(得分:0)

你不需要每个级别的表。您需要基于递归关系的表,这将允许您创建'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的孩子。