Общие > Базы данных

Nested Set Поменять ветки местами на одном уровне

<< < (2/2)

Phoinix:
Т.к. пользуюсь DBI то решил сначала выбрать SELECT обе ветки в разные массивы, а потом обработать, но так получается еще медленней... Но впрочем это не так важно, и так работает, тем более действительно перемещение узлов не такая частая процедура...

slash2k:
Попробовал все как ты сказал, phoinix.

Перемещение вниз

Получилось так


//Выбираем узел который перемещаем:

$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);



Все рботет, если у той записи,кот. мы перемещеаем и последующей нету потомков. Если есть, то все литит в трубу. В чем может быть проблема?

Phoinix:
slash2k

http://www.webscript.ru/stories/05/01/24/6319028

Навигация

[0] Главная страница сообщений

[*] Предыдущая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии