2012-07-30 46 views
1

我有以下数据库:序遍历父子动态插入不工作

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和级别。问题是当我试图插入记录前。管理员类别下的Jr.Manager和Sr.Manager未正确插入。而不是“经理”类别插入在HR-> Jr.Manager-> Sr.Manager之下。 上述代码有什么问题?

这里是为了更好地理解图像:你首先指出,“等级”是你从一开始要求加一得到什么级别

Here is the image for better understanding:

回答

0

我稍微修改您的代码只是试试这个:

$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); 

它会为你工作。

0

。它总是增加你的水平,所以它放弃了jr。 HR和SR的经理。经理在Jr。经理。

是否有必要增加从您的GET请求的水平?