off
Новичок
Перемещение узлов Nested sets на одном уровне
Написал перемещение вниз для узлов одного и того же уровня.
Получилось так
Все рботет, если у той записи,кот. мы перемещеаем и последующей нету потомков. Если есть, то все литит в трубу. В чем может быть проблема?
Написал перемещение вниз для узлов одного и того же уровня.
Получилось так
PHP:
//Выбираем узел который перемещаем:
$sql = "SELECT * FROM c_tree WHERE id=$parent_id";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$left_key = $row['left_key'];
$right_key = $row ['right_key'];
$level = $row['level'];
$page_id = $row['page_id'];
$p_parent_id = $row['parent_id'];
//Выбираем узел который ниже по порядку
$sql = "SELECT * FROM c_tree WHERE left_key = $right_key + 1 AND level = $level";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$left_key_down = $row['left_key'];
$right_key_down = $row ['right_key'];
//Получаем смещения ключей каждого узла:
$skew1 = $right_key - $left_key + 1;
$skew2 = $right_key_down - $left_key_down + 1;
//Выбираем идентификаторы:
$sql = "SELECT * FROM c_tree WHERE left_key >= $left_key AND right_key <= $right_key";
$res = mysql_query($sql);
$row = mysql_fetch_array($res);
$id_move = $row ['id'];
//Меняем ключи второго узла
$sql = "UPDATE c_tree SET left_key = left_key - $skew1, right_key = right_key - $skew1 WHERE left_key >= $left_key_down AND right_key <= $right_key_down";
$res = mysql_query($sql);
//Меняем ключи перемещаемого узла:
$sql = "UPDATE c_tree SET left_key = left_key + $skew2, right_key = right_key + $skew2 WHERE id IN ($id_move)";
$res = mysql_query($sql);