早上好,我试图在遍历树中上下移动节点,但问题是,如果我有查询移动节点,它会抛出我的sql语法错误,拜托,你有什么想法吗? ,问题出在哪里?
UPDATE categories
SET lft = IF( lft >= 17 AND rgt <= 18, lft + 1, IF(lft >= 15 AND rgt <= 16, lft - 1)),
rgt = IF( lft >= 17 AND rgt <= 18, rgt + 1, IF(lft >= 15 AND rgt <= 16, rgt - 1))
WHERE (rgt <= 18 AND lft >= 15)
感谢您的回答和解决方案!
编辑: 谢谢你的帮助,除了一个问题 - 第二个条件外,它有效。它没有做任何正确的值: 父rgt仍然相同,移动元素的rgt设置为0。 哪里可能有问题? 所以问题解决了。我的故事。我正在比较编辑的值,所以这是错误的。
答案 0 :(得分:2)
你缺少内部IF()函数调用中的第三个参数,例如
IF(lft >= 15 AND rgt <= 16, lft - 1)
^ ^^^^
它应该是:
IF(lft >= 15 AND rgt <= 16, lft - 1, else_stmt_expre)
^^^^^ missing
答案 1 :(得分:2)
您错过了内部IF()
中的第三个参数试试这个
UPDATE categories
SET lft = IF( lft >= 17 AND rgt <= 18, lft + 1, IF(lft >= 15 AND rgt <= 16, lft - 1,0)),
rgt = IF( lft >= 17 AND rgt <= 18, rgt + 1, IF(lft >= 15 AND rgt <= 16, rgt - 1,0))
WHERE (rgt <= 18 AND lft >= 15)
你可以用任何东西替换0