私は次のデータベースを持っています:
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のように挿入します。上記のコードの何が問題になっていますか?
理解を深めるための画像は次のとおりです。