2011-06-12 103 views
1

比方說,我有如下定義表結構:構建數組來表示公司的層次結構

id(int),related_to(int),description(text

和表包含類似的數據:

id related_to  description 
1  0   departmen1 
2  1   section1 
3  2   devision1 
4  0   departmen2 
5  4   section2 
6  4   etc.... 

我需要一個SQL語句或PHP代碼來表示每個Hierarchy在一個單獨的數組元素中。

的結果必須是

$data=array(
0=>'department1','section1','devision1' 
2=>'departmen2','section2','devision2' 
3=> 'departmen1','section3',....... 
); 

什麼是做到這一點的最好方法是什麼?

謝謝。

+0

SQL語句不能返回分層數據類型,可以嗎? – hakre 2011-06-12 13:37:58

+0

層次結構可以有多深? – Karolis 2011-06-12 13:39:06

+0

沒有一個人不是深層次的限制, – ahmad 2011-06-12 13:43:20

回答

3

在PHP中使用樹狀結構的最佳方式是使用對象。一個很好的例子可以找到here

將函數添加到以所需數組格式返回子對象的樹對象,並在子對象上調用相同的函數。通過頂層對象上的一個函數調用,您將收到所需格式的所有孩子的數組。有關遞歸函數的更多信息,請參閱Tree Traversal

1

根據我的經驗,嵌套集解決這個問題要好得多。在應用程序級使用遞歸函數浪費了大量的網絡時間,特別是如果你有一個非常大的結構。雖然處理起來可能有點奇怪,但是一旦你具有操作嵌套集的功能,它們就變得易於使用。

請參見:Managing Hierarchical Data In MySQL

嵌套組可以處理無限深樹,並且可以在一個單一的查詢返回與父子關係整個樹。您也可以使用單個查詢返回「血統」,而無需使用遞歸或應用程序排序。

從單個SQL查詢中獲取數據後,您可以輕鬆地將其分類到您的PHP應用程序中的通用樹結構中,以便顯示或進一步處理。