2011-04-24 105 views
4

我試圖按類別創建技術書籍列表,每本書可以屬於多個類別,每個類別都可以是父類別和一個子類別。多對多的多對多層次結構 - 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 

我讀過許多其他問題/答案,但沒有什麼能夠處理這種類型的「寬鬆」的層次。

有沒有人知道如何以這種方式設置一個列表?

回答

0

如果您的數據集很小(< 10000),那麼您可以在4個SELECT所有查詢中獲取所有數據,並在PHP中執行所有的類別/子類別計算。

樹木和關係數據庫不一起去很好:)

0

做這一切與PHP,創建一個功能,您將包括網頁,這樣,如果有什麼發生了改變,您不必更新表,只是包含該功能的文件。

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,無論你想要什麼)。

3

假設你的類別不能形成循環,就像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