У меня есть следующая база данных:
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. Jr.Manager и Sr.Manager в категории Manager, он не вставлен должным образом. Вместо категории «Менеджер» его вставка под HR-> Jr.Manager-> Sr.Manager. Что не так с вышеуказанным кодом?
Вот изображение для лучшего понимания:
Вы начинаете с того, что «уровень» – это любой уровень, который вы получаете от get-request plus. Он всегда увеличивает ваш уровень, поэтому он помещает jr. менеджер по HR и sr. менеджер под jr. менеджер.
Нужно ли увеличивать уровень с вашего запроса на получение?
Я немного изменил ваш код, просто попробуйте это:
$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);
Это сработает для вас.