我有一个包含categoryId,name和parentId的表。我想构建一个包含结构
的父树和子树的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 :(得分:0)
我使用“Modified Preorder Tree Traversal”,也称为“嵌套集”。 This Sitepoint article提供了有关其工作原理的完美摘要。 Hector Virgen已经写了一个Zend_Db_Table enhancement来支持我正在使用它,因为我的应用程序是在Zend Framework上构建的。我还使用the code written by Nick Pack在PHP中构建树。
答案 1 :(得分: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>';
然后,您可以为每个班级level1
,level2
等设置列表的样式。
答案 2 :(得分:-1)
您可能正在将递归函数视为最简单的解决方案。一个非常简单的例子是这样的,你可以使用各种技术使它成为一个合适的树结构。真的取决于你想做什么tbh
function showlist($parent=NULL) {
$q = ($parent !== NULL) ? "SELECT `id`,`name` FROM `categories` WHERE `parentId` ='".$parent."'" : "SELECT `id`,`name` FROM `categories` WHERE `parentId` IS NULL";
$result = mysql_query($q)or die(mysql_error());
while ($cat = mysql_fetch_assoc($result)) {
echo $line['name'];
showlist($line['id']);
}
}
关于MySQL site关于管理分层数据的一些非常好的信息,但最优雅的解决方案意味着你改变你的Schema,我不确定你是否能够做到?