我试图将我的数据分层设置为树遍历模型到<ul>,以便在我的网站上显示.
这是我的代码:
function getCats($) {
// retrieve all children of $parent
$query = "SELECT max(rght) as max from t_categories";
$row = C_DB::fetchSingleRow($query);
$max = $row["max"];
$result ="<ul>";
$query = "SELECT * from t_categories where lft >=0 and rght <= $max";
if($rs = C_DB::fetchRecordset($query)){
$p_right ="";
$p_left ="";
$p_diff="";
while($row = C_DB::fetchRow($rs)){
$diff = $row["rght"] -$row["lft"];
if($diff == $p_diff){
$result.= "<li>".$row['title']."</li>";
}elseif (($row["rght"] - $row["lft"] > 1) && ($row["rght"] > $p_right)){
$result. "<ul>";
$result.= "<li>".$row['title']."</li>";
}else{
$result.= "<li>".$row['title']."</li>";
}
$p_right = …Run Code Online (Sandbox Code Playgroud) 我需要在用户定义的层次结构中构建一个用于存储"类别"(我想不出更好的词)的新系统.由于嵌套集模型针对读取而不是写入进行了优化,因此我决定使用它.不幸的是,在我研究和测试嵌套集时,我遇到了如何显示带有排序节点的分层树的问题.例如,如果我有层次结构:
root
finances
budgeting
fy08
projects
research
fabrication
release
trash
Run Code Online (Sandbox Code Playgroud)
我希望对它进行排序,使其显示为:
root
finances
budgeting
fy08
projects
fabrication
release
research
trash
Run Code Online (Sandbox Code Playgroud)
请注意,制作在研究之前出现.
无论如何,经过长时间的搜索,我看到了诸如"将树存储在一个多维数组中并对其进行排序"和"求助树并序列化回嵌套集模型"的答案(我正在解释......).无论哪种方式,第一个解决方案是RAM和CPU的可怕浪费,这两者都是非常有限的资源......第二个解决方案看起来像很多痛苦的代码.
无论如何,我能够弄清楚如何(使用嵌套集模型):
所以我认为#5和#6可用于进行我想要的排序,它也可以用于按排序顺序重建树.
但是,现在我已经了解了所有这些我学会了做的事情,我看到#3,#5和#6可以一起用来执行排序插入.如果我做了排序插入,它总是被排序.但是,如果我改变排序标准或者我想要一个不同的排序顺序,我就会回到原点.
这可能只是嵌套集模型的限制吗?它的使用是否会抑制输出的查询排序?