mysql查询if语句,更新错误

时间:2014-03-01 08:34:31

标签: mysql sql

早上好,我试图在遍历树中上下移动节点,但问题是,如果我有查询移动节点,它会抛出我的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。 哪里可能有问题? 所以问题解决了。我的故事。我正在比较编辑的值,所以这是错误的。

2 个答案:

答案 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