2010-06-29 60 views
2

我有一個表與categoryId,名稱和parentId。我想與父母和子女的樹建立一個HTML表狀結構建立類別 - 從MySQL表中的子類別的HTML列表

我的表看起來像這樣

------------------------------------------------------------------ 
id categoryId parentId categoryName  SortSeq 
------------------------------------------------------------------ 
1 438044691 NULL  test    1 
2 438044692 438044691 test item one  2 
3 438044693 438044691 test item two  3 
1 438044701 NULL  testOne   4  
2 438044702 438044701 testOne item one 5 
3 438044703 438044701 testOne item two 6 
1 438044709 NULL  testTwo   7 
2 438044710 438044709 testTwo item one 8 
3 438044711 438044709 testTwo item two 9 

結構可以有子子類別項目爲好。但在這個例子中它只是一個。

如果您認爲問題不完整,我將非常樂意爲您提供更多信息。

非常感謝。

+0

的可能重複[遞歸類別與單個查詢?](http://stackoverflow.com/問題/ 3116330 /帶單一查詢的遞歸類別) – Gordon 2010-06-29 13:46:54

+0

您能修改表格結構,添加新列等嗎? – Sonny 2010-06-29 19:59:45

回答

-1

您可能將遞歸函數看作是最簡單的解決方案。一個非常簡單的例子就是這樣的,你可以使用各種技術來使它成爲一個合適的樹結構。實際上取決於你想要做什麼TBH

​​

即使世界上MySQL site一些非常好的信息有關管理分層數據,但最優雅的解決方案將意味着你改變你的架構,我不敢肯定,如果你能做還是不做?

0

我使用「修改預置樹遍歷」,也稱爲「嵌套集」。 This Sitepoint article提供了它如何工作的一個很好的總結。 Hector Virgen已經寫了一個Zend_Db_Table enhancement來支持我使用的應用程序,因爲我的應用程序是基於Zend Framework構建的。我也用the code written by Nick Pack在PHP中構建樹。

+0

我更喜歡作爲一個解決方案,但它確實需要一個模式更改,所以我認爲遞歸可能是OP與他的模式卡住的最佳選項 – robjmills 2010-06-29 14:08:54

0
function categorylist($parent=NULL, $level = 0) { 
    $sql = "SELECT `id`,`name` FROM `categories` WHERE `parentId`"; 
    if($parent === NULL) { 
     $sql .= " IS NULL"; 
    else { 
     $sql .= " = '".$parent."'"; 
    } 
    $sql .= " ORDER BY `SortSeq`"; 
    $res = mysql_query($sql); 
    while ($cat = mysql_fetch_object($res)) {   
     echo '<li class="level'.$level.'">'.$line['name'].'</li>'; 
     $new_level = $level + 1; 
     categorylist($line['id'], $new_level); 
    } 
} 

echo '<ul>'; 
categorylist(); 
echo '</ul>'; 

然後可以樣式要如何與每個每一類level1level2等名單..

+0

$ line從哪裏來? – medoix 2012-09-28 12:10:21