【问题标题】:Preorder traversal parent-child dynamic insertion not working前序遍历父子动态插入不起作用
【发布时间】:2012-07-30 07:02:27
【问题描述】:

我有以下数据库:

id  name            unit_id lft rgt level
--  --------------  ------- --- --- -----
1   Company Name    1       1   2   0
2   Manager         2       2   9   1
3   HR              3       3   8   2
4   Jr.Manager      5       5   8   2
5   Sr.Manager      8       7   8   2

我想在上面的前序遍历表中插入记录。为此,我使用了以下代码和查询:

function addstructure() {
        $level = $_GET['level'] + 1;
        $rgt = $_GET['rgt'] + 1;
        if ($_GET['level'] == 0) {
            $sql = "UPDATE xp_subunit SET lft = lft+2, rgt=rgt+2 WHERE rgt > " . $_GET['rgt'] . "; ";
            $this->db->query($sql);
            $sql = "INSERT INTO xp_subunit SET level=" . $level . ", lft =" . $_GET['rgt'] . ", rgt =  " . $rgt . " , name = '" . $_GET['name'] . "', unit_id='" . $_GET['unit_id'] . "', description='" . $_GET['description'] . "';";
            $this->db->query($sql);
        } else {
            $sql = "UPDATE xp_subunit SET rgt = rgt+2 WHERE rgt > " . $_GET['lft'] . "; ";
            $this->db->query($sql);
            $sql = "INSERT INTO xp_subunit SET level=" . $level . ", lft =" . $_GET['rgt'] . ", rgt =  " . $rgt . " , name = '" . $_GET['name'] . "', unit_id='" . $_GET['unit_id'] . "', description='" . $_GET['description'] . "';";
            echo $this->db->query($sql);
        }
    }

我正在从数据库中获取 lft、rgt 和 level。问题是当我尝试插入记录前。 Manager 类别下的 Jr.Manager 和 Sr.Manager 未正确插入。而不是“经理”类别,而是在 HR->Jr.Manager->Sr.Manager 下插入。 上面的代码有什么问题?

为了便于理解,这里是图片:

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    您首先声明“级别”是您从获取请求中获得的任何级别加一。它总是增加你的水平,所以它把 jr.人力资源部经理和高级经理。 jr.下的经理经理。

    是否有必要从您的获取请求中增加级别?

    【讨论】:

      【解决方案2】:

      我稍微修改了你的代码,试试这个:

          $name = $_GET['name'];
          $rgt = $_GET['rgt'];
          $lft = $_GET['lft'];
          $level = $_GET['level'] + 1;
          $right = $rgt + 1;
      
          $sql1 = "UPDATE xp_subunit SET lft = lft+2 WHERE lft >= $rgt ;";
          $this->db->query($sql1);
          $sql2 = "UPDATE xp_subunit SET rgt = rgt+2 WHERE rgt >= $rgt ;";
          $this->db->query($sql2);
          $sql3 = "INSERT INTO xp_subunit (`id`,`name`,`unit_id`,`lft`, `rgt`, `level`)        
      values (NULL, '$name', '$unit_id',$rgt, $right, '$level');";
          echo $this->db->query($sql3);
      

      它会为你工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-17
        • 2012-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-02
        • 1970-01-01
        • 2013-08-26
        相关资源
        最近更新 更多