2014-03-01 2 views
-2

안녕하세요, 탐색 트리에서 노드를 위아래로 이동하려고합니다. 그러나 문제는 노드 이동에 대한 쿼리가 있으면 SQL 구문에 오류가 발생한다는 것입니다. 제발, 문제가 어디 있는지 아세요?mysql 쿼리 if 문, 업데이트 오류

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

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을 0으로 바꿀 수 있습니다

2

당신은 예를 들어,이

IF(lft >= 15 AND rgt <= 16, lft - 1) 
         ^  ^^^^ 

그것을해야한다, 내부 IF() 함수 호출의 세 번째 인수가 누락되었습니다 : 당신은 내부에서 세 번째 인수를 놓친

IF(lft >= 15 AND rgt <= 16, lft - 1, else_stmt_expre) 
            ^^^^^ missing 
+0

@ JanKožušník는 'else_stmt_expre'를 0으로 대체합니다. –