我正在尝试按类别创建一个技术书籍列表,其中每本书可以属于多个类别,每个类别既可以是父类别又可以是子类别。
这里有一个例子:
JavaScript
JavaScript模式
面向对象的JavaScript
- Ajax
Ajax权威指南
防弹Ajax jQuery
学习jQuery 1.3
PHP概览
PHP jQuery Cookbook
Ajax权威指南
防弹Ajax
- XML>
XML Hacks
严肃的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中分层数据的问题/答案,但是没有一个可以处理这种"松散"的分层。
有谁知道如何用这种方式建立一个列表吗?
假设您的类别不能形成循环,如a->b->c->a,您的结构称为有向无环图,这在SQL中不容易处理,但可能。谷歌应该会有一些结果,你也可以从这里开始:http://www.codeproject.com/KB/database/Modeling_DAGs_on_SQL_DBs.aspx
如果你的数据集很小(<10000),那么你可以在4 SELECT all查询中获取所有数据,并在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中取任意值)。