Я пытаюсь использовать ответ здесь: Переместить узел во вложенном множестве
Чтобы переместить узел во вложенном множестве mysql, он работает нормально, за исключением того, что движущийся узелустанавливается в отрицательное значение и никогда не изменяется на новые значения lft & rgt.Кажется, что Шаг 4 вообще ничего не делает.Я изменил скрипт, чтобы он соответствовал моей структуре, и удалил обновление parentID на шаге 4, потому что я не сохраняю parentID в своей структуре.
Может кто-нибудь сказать мне, почему это не работает?вот мой код:
// id of moving node
$iItemId = 13;
// left position of moving node
$iItemPosLeft = 19;
// right position of moving node
$iItemPosRight = 20;
// id of new parent node (where moving node should be moved)
$iParentId = 8;
// right position of new parent node (where moving node should be moved)
$iParentPosRight = 15;
// 'size' of moving node (including all its sub-nodes)
$iSize = $iItemPosRight - $iItemPosLeft + 1;
$sql = array(
// step 1: temporarily "remove" moving node
'UPDATE `RJF_storeNestedCategory`
SET `lft` = 0-(`lft`), `rgt` = 0-(`rgt`)
WHERE `lft` >= "'.$iItemPosLeft.'" AND `rgt` <= "'.$iItemPosRight.'"',
// step 2: decrease left and/or right position values of currently 'lower' items (and parents)
'UPDATE `RJF_storeNestedCategory`
SET `lft` = `lft` - '.$iSize.'
WHERE `lft` > "'.$iItemPosRight.'"',
'UPDATE `RJF_storeNestedCategory`
SET `rgt` = `rgt` - '.$iSize.'
WHERE `rgt` > "'.$iItemPosRight.'"',
// step 3: increase left and/or right position values of future 'lower' items (and parents)
'UPDATE `RJF_storeNestedCategory`
SET `lft` = `lft` + '.$iSize.'
WHERE `lft` >= "'.($iParentPosRight > $iItemPosRight ? $iParentPosRight - $iSize : $iParentPosRight).'"',
'UPDATE `RJF_storeNestedCategory`
SET `rgt` = `rgt` + '.$iSize.'
WHERE `rgt` >= "'.($iParentPosRight > $iItemPosRight ? $iParentPosRight - $iSize : $iParentPosRight).'"',
// step 4: move node (ant it's subnodes) and update it's parent item id
'UPDATE `RJF_storeNestedCategory`
SET
`lft` = 0-(`lft`)+'.($iParentPosRight > $iItemPosRight ? $iParentPosRight - $iItemPosRight - 1 : $iParentPosRight - $iItemPosRight - 1 + $iSize).',
`rgt` = 0-(`rgt`)+'.($iParentPosRight > $iItemPosRight ? $iParentPosRight - $iItemPosRight - 1 : $iParentPosRight - $iItemPosRight - 1 + $iSize).'
WHERE `lft` <= "'.(0-$iItemPosLeft).'" AND i.`rgt` >= "'.(0-$iItemPosRight).'"');
foreach($sql as $sqlQuery){
mysql_query($sqlQuery);
}
Мне также интересно, если кто-нибудь знает, как использовать это для перемещения узла влево или вправо в пределах его существующего родителя.