多对多的多对多层次结构 - PHP,MySQL

问题描述:

我试图按类别创建技术书籍列表,每本书可以属于多个类别,每个类别都可以是父类别和一个子类别。多对多的多对多层次结构 - PHP,MySQL

这里有一个例证:

的JavaScript
JavaScript的模式
面向对象的JavaScript

  • 阿贾克斯
    的Ajax权威指南
    防弹阿贾克斯

  • jQuery的
    学习jQuery的1.3
    PHP jQuery的食谱

PHP
PHP果壳
PHP jQuery的食谱

阿贾克斯
阿贾克斯权威指南
防弹阿贾克斯

  • XML
    XML黑客
    没有废话XML

-

正如你可以看到... ...

  • Ť他预定“PHP jQuery的食谱”属于两大类:PHP和jQuery
  • 类别“阿贾克斯”既是一个JavaScript的孩子和XML的父(但XML不是JavaScript的一个子)

我设计数据库表是这样的:在MySQL的分层数据

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

我读过许多其他问题/答案,但没有什么能够处理这种类型的“宽松”的层次。

有没有人知道如何以这种方式设置一个列表?

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

树木和关系数据库不一起去很好:)

做这一切与PHP,创建一个功能,您将包括网页,这样,如果有什么发生了改变,您不必更新表,只是包含该功能的文件。

我会创造

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,无论你想要什么)。

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

+0

绝对有帮助有一个名字把这个,谢谢。这似乎是一个这样的常见问题 - 令人沮丧的是,在PHP/MySQL中没有更直接的方式处理它。 – cantera 2011-04-25 22:23:46