php - 预序遍历父子动态插入不起作用

标签 php mysql codeigniter

我有以下数据库:

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 和级别。问题是当我试图插入记录 ex 时。 Manager类下的Jr.Manager和Sr.Manager,没有正确插入。它不是插入“经理”类别,而是插入 HR->Jr.Manager->Sr.Manager 之类的。 上面的代码有什么问题?

为了更好地理解,这里是图像:

Here is the image for better understanding:

最佳答案

您首先声明“级别”是您从 get-request 获得的级别加一。它总是会增加你的水平,所以它把 jr。人力资源和高级经理。 jr. 下的经理经理。

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

关于php - 预序遍历父子动态插入不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11716731/

相关文章:

php - 是什么导致 Safari 无法在此代码中获取 navigator.geolocation.getCurrentPosition ?

php - 对于自动生成的字段,必须在 SQL 语句中输入什么?

php - mysql 不同的查询

php - 根据每个请求更新 `last_active`

php - 在 PHP 中混合引号

php - 如何获取另一个表 MySQL 查询的组头结果

mysql - NodeJS 插入几行

mysql - 无法使用 Codeigniter 显示来自 mysql 数据库的特殊字符..显示“描述”

java - JUpload与codeigniter结合

JavaScript diceRoller 仅适用于 Chrome