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、levelを取得しています。問題は、レコードexを挿入しようとしたときです。Jr.ManagerおよびSr.ManagerがManagerカテゴリにあり、正しく挿入されていません。「マネージャー」カテゴリの代わりに、HR->Jr.Manager->Sr.Managerのように挿入します。上記のコードの何が問題になっていますか?

理解を深めるための画像は次のとおりです。

理解を深めるための画像は次のとおりです。

4

2 に答える 2

0

「レベル」は、get-requestプラス1から取得するレベルであると述べることから始めます。それは常にあなたのレベルを増加させるので、それはjrを置きます。HRおよびsrの下のマネージャー。ジュニアの下のマネージャー マネジャー。

get-requestからレベルを上げる必要がありますか?

于 2012-07-30T10:00:06.387 に答える
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);

それはあなたのために働くでしょう。

于 2012-08-07T10:01:02.837 に答える