2010-06-29 61 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