相关疑难解决方法(0)

将修改后的预订树遍历模型(嵌套集)转换为<ul>

我试图将我的数据分层设置为树遍历模型到<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)

html php traversal nested-sets

21
推荐指数
2
解决办法
2万
查看次数

如何对使用嵌套集模型存储的树进行排序?

当我提到嵌套集模型时,我指的是这里描述的内容.

我需要在用户定义的层次结构中构建一个用于存储"类别"(我想不出更好的词)的新系统.由于嵌套集模型针对读取而不是写入进行了优化,因此我决定使用它.不幸的是,在我研究和测试嵌套集时,我遇到了如何显示带有排序节点的分层树的问题.例如,如果我有层次结构:

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的可怕浪费,这两者都是非常有限的资源......第二个解决方案看起来像很多痛苦的代码.

无论如何,我能够弄清楚如何(使用嵌套集模型):

  1. 在SQL中启动一个新树
  2. 将节点作为树中另一个节点的子节点插入
  3. 在树中的兄弟节点之后插入节点
  4. 使用SQL中的层次结构拉出整个树
  5. 从具有或不具有深度限制的层次结构中的特定节点(包括根)拉出子树
  6. 找到树中任何节点的父节点

所以我认为#5和#6可用于进行我想要的排序,它也可以用于按排序顺序重建树.

但是,现在我已经了解了所有这些我学会了做的事情,我看到#3,#5和#6可以一起用来执行排序插入.如果我做了排序插入,它总是被排序.但是,如果我改变排序标准或者我想要一个不同的排序顺序,我就会回到原点.

这可能只是嵌套集模型的限制吗?它的使用是否会抑制输出的查询排序?

database tree hierarchy nested-sets

16
推荐指数
1
解决办法
1万
查看次数

标签 统计

nested-sets ×2

database ×1

hierarchy ×1

html ×1

php ×1

traversal ×1

tree ×1