Mysql 在嵌套集中移动节点

Mysql 在嵌套集中移动节点,mysql,nested,set,move,Mysql,Nested,Set,Move,我试着用这里的答案: 要在mysql嵌套集db中移动节点,它似乎工作正常,但移动节点被设置为负值,并且从未更改为新的lft&rgt值。似乎第4步根本没有做任何事情。我已更改脚本以匹配我的结构,并在步骤4中删除了更新parentID,因为我没有将parentID存储在我的结构中 有人能告诉我为什么这不起作用吗?这是我的密码: // id of moving node $iItemId = 13; // left position of moving node $iItemPosLeft = 1

我试着用这里的答案:

要在mysql嵌套集db中移动节点,它似乎工作正常,但移动节点被设置为负值,并且从未更改为新的lft&rgt值。似乎第4步根本没有做任何事情。我已更改脚本以匹配我的结构,并在步骤4中删除了更新parentID,因为我没有将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);
}
//移动节点的id
$iItemId=13;
//移动节点的左位置
$iItemPosLeft=19;
//移动节点的正确位置
$iItemPosRight=20;
//新父节点的id(移动节点应移动的位置)
$iParentId=8;
//新父节点的正确位置(移动节点应移动的位置)
$iParentPosRight=15;
//移动节点的“大小”(包括其所有子节点)
$iSize=$iItemPosRight-$iItemPosLeft+1;
$sql=数组(
//步骤1:临时“删除”移动节点
'UPDATE`RJF_storeNestedCategory`
设置'lft`=0-('lft`)),'rgt`=0-('rgt`)
其中'lft`>='.$iItemPosLeft.''和'rgt`.$iItemPosRight.'',
'UPDATE`RJF_storeNestedCategory`
设置'rgt`='rgt`-'。$iSize'
其中,`rgt`>“.$iItemPosRight.”,
//步骤3:增加未来“较低”项目(和父项)的左和/或右位置值
'UPDATE`RJF_storeNestedCategory`
设置'lft`='lft`+.$iSize'
其中'lft`>=“。($iParentPosRight>$iItemPosRight?$iParentPosRight-$iSize:$iParentPosRight)。”,
'UPDATE`RJF_storeNestedCategory`
设置'rgt`='rgt`+'.$iSize'
其中,`rgt`>=”。($iParentPosRight>$iItemPosRight?$iParentPosRight-$iSize:$iParentPosRight)。“,
//步骤4:移动节点(ant及其子节点)并更新其父项id
'UPDATE`RJF_storeNestedCategory`
设置
`lft`=0-(`lft`)+。($iParentPosRight>$iItemPosRight?$iParentPosRight-$iItemPosRight-1:$iParentPosRight-$iItemPosRight-1+$iSize)。”,
`rgt`=0-(`rgt`)+。($iParentPosRight>$iItemPosRight?$iParentPosRight-$iItemPosRight-1:$iParentPosRight-$iItemPosRight-1+$iSize)。'
其中'lft`='(0-$iItemPosRight)。'”;
foreach($sql作为$sqlQuery){
mysql\u查询($sqlQuery);
}

如果有人知道如何使用它在现有父节点中向左或向右移动节点,我也很感兴趣。

我删除了意外的I。这个查询正是我想要的。要使用相同的查询向左或向右移动节点,只需将移动节点之前显示的节点的左值替换为$iParentPosRight值。

发现了此问题,出现了一个rogue i。在上一个查询中,应该读到:WHERE
lft
=”(0-$iItemPosRight)。”;仍然想知道是否有人可以帮助我使用它在当前父节点中向左或向右移动节点。谢谢要使用相同的查询向左或向右移动节点,只需将移动节点之前显示的节点的左值替换为$iParentPosRight值。