具有多个父级的多对多层次结构 - PHP,MySQL

时间:2011-04-24 23:14:24

标签: php mysql hierarchy categories

我正在尝试按类别创建技术书籍列表,其中每本书可以属于多个类别,每个类别可以是父类别和子类别。

以下是插图:

的JavaScript
JavaScript模式
面向对象的JavaScript

  • 的Ajax
    Ajax权威指南
    防弹Ajax

  • 的jQuery
    学习jQuery 1.3
    PHP jQuery Cookbook

PHP
PHP in a Nutshell
PHP jQuery Cookbook

的Ajax
Ajax权威指南
防弹Ajax

  • XML
    XML Hacks
    No-Nonsense XML

-

正如你所看到的......

  • “PHP jQuery Cookbook”一书分为两类:PHP和jQuery
  • 类别“Ajax”既是JavaScript的子类,也是XML的父类(但XML不是JavaScript的子代)

我用这种方式设计了数据库表:

BOOK:          book_id, book_title  
CATEGORY:      category_id, category_name  
BOOK_CATEGORY: book_id, category_id
CATEGORY_TREE: parent_category_id, child_category_id

我已经在MySQL中阅读了许多关于分层数据的其他问题/答案,但没有任何东西可以处理这种“松散”的层次结构。

有谁知道如何以这种方式设置列表?

4 个答案:

答案 0 :(得分:3)

假设您的类别不能形成周期,例如a-> b-> c-> a,您的结构称为有向非循环图,这在SQL中不易处理,但可能。谷歌搜索应该给出一些结果,你也可以从这里开始: http://www.codeproject.com/KB/database/Modeling_DAGs_on_SQL_DBs.aspx

答案 1 :(得分:0)

如果您的数据集很小(<10000),那么您只需获取4 SELECT所有查询中的所有数据,并在PHP中执行所有类别/子类别计算。

树和关系数据库不能很好地结合在一起:)

答案 2 :(得分:0)

使用php完成所有操作,创建一个包含在页面中的函数,这样如果有任何改变,你不必更新表,只需要包含该函数的文件。

答案 3 :(得分:0)

我会创建

books (book_id, category_id)
categories (category_id, parent_category_id, category_name, category_level)

其中category.parent_category_id可以是NULL。如果是NULL,则category_level将为0(1,无论您想要什么)。