2011-06-02 50 views
3

我想這對於構建任何類型的應用程序來說是相當普遍的需求,這些應用程序依賴於類別的排序和顯示數據 - 任何CMS /論壇/購物車等,我一直在試圖思考的一種方式來顯示所有類別和他們的孩子無濟於事 - 我已經管理的最好的while while循環while while循環(但是我認爲我可能需要很多級別),但是這在我看來打敗了編程點,它需要毫不費力地可擴展。顯示無限分類結構 - >子分類 - >等等?

因此,考慮到:

Category 1 
-Sub cat 
-Sub cat 
--Sub sub cat 
--- Sub sub cat 
-- Sub sub cat 
-Sub cat 
Category 2 
-Sub cat 
-Sub cat 
--Sub sub cat 
---sub sub sub cat 
----sub sub sub sub cat 
-sub cat 
Category 3 
-Sub cat 

數據庫字段:ID名稱ParentIDS

你怎麼會去從數據庫呼應每個類別中的層次?

我會發布我的代碼,但顯然它的龐大,給出了嵌套循環的長期方式。

我想過編寫一些代碼,可以找到類別樹的「深度」,但仍然不能削減它..想法?

回答

1

你說的結構本質上是一棵樹。如果使用遞歸,遍歷樹就相對簡單。我不知道你正在使用的數據庫訪問代碼,但你應該能夠從以下僞碼據此推斷:

function iterate_tree(arr) { 
    foreach (item in arr) { 
     print item; 
     iterate_tree(item.children); 
    } 
} 

在英語中,這意味着在打印列表中的項目,然後打印其子,並且一旦所有的孩子(以及他們的孩子)都打印完了,就轉到列表中的下一個項目。

+0

啊,這很好......我用我的嵌套while循環的一半,這只是我最初瞄準的邏輯類型。謝謝。 :D ...我看了一下嵌套層次結構的mysql文章,儘管它起作用,但對於可以實現的目標來說,它看起來很囉嗦。 – Anonymous 2011-06-02 10:54:01

+0

我沒有讀過嵌套集合模型,因爲我對MySql沒有興趣。使用ORM獲取父 - >子或父 - 子關係通常相當容易,或者通過將數據投入到層次結構並以這種方式遍歷它。決定你認爲哪個更好,然後去用它。 – 2011-06-02 11:01:48

+0

@Chris,真的是它的表現。如果您以樹形式獲得大量數據,那麼您將花費額外的時間爲數據庫以適當的形式建模該數據。如果你需要做很多像樹一樣的操作,它也會對你有益。如果你有100個左右的數據(我選擇了一個隨機數),那麼將所有數據轉換爲代碼並操作它仍然很快,但沒有在數據庫中建模的複雜性。如果你只是想顯示你的數據,那麼我寫的方法將會很好, – 2011-06-02 11:05:41

1

在mysql網站上有一個很不錯的教程。

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ 轉到如果你想讀最有趣的部分

坦白說,我不認爲有任何其他/更好的方式來存儲數據hierearchical的The Nested Set Model

+0

一個有趣的概念,我可以誠實地說,我永遠不會想到這樣的概念,我會有一個戲劇 - 非常感謝。 :) – Anonymous 2011-06-02 10:50:09

+0

@Chris:如果你認爲這個答案幫助你認爲選擇它作爲答案。 Cheres – dynamic 2011-06-02 10:50:45

+0

我會在與其他作者完成任何後續查詢時選擇正確答案,不用擔心。 – Anonymous 2011-06-02 11:01:10

1

作爲提示,您可以使用遞歸。總想法可在http://en.wikipedia.org/wiki/Recursion獲得。即您編寫的功能可以抓取並顯示當前文件夾中的所有文件和文件夾。然後,您在同一個遞歸循環中爲每個子文件夾重複應用相同的函數。等等等等