2011-09-30 2 views
3

sqlite 데이터베이스에 대해 중첩 세트 모델을 구현하려고합니다. 지금까지 리프 노드를 가져 와서 하위 노드를 찾는 방법을 구현했습니다. this 튜토리얼을 참조로 사용합니다 그러나 새로운 노드를 삽입 할 때 막혔습니다. 여기 여기 내 문제는 내가 다음 하나에 첫 번째 쿼리의 결과를 전달 할 필요가 있다는 것입니다 .. 내가 SQLite는 아무런 잠금 테이블이 없다는 것을 알고있는 사이트SQLite에 대한 중첩 세트 INSERT 조작

LOCK TABLE nested_category WRITE; 

SELECT @myRight := rgt FROM nested_category 
WHERE name = 'TELEVISIONS'; 

UPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myRight; 
UPDATE nested_category SET lft = lft + 2 WHERE lft > @myRight; 

INSERT INTO nested_category(name, lft, rgt) VALUES('GAME CONSOLES', @myRight + 1, @myRight + 2); 

UNLOCK TABLES; 

의 코드입니다. 여기에 @로 사용자 생성 변수를 사용하면됩니다. 나는 SQLite에서 어떻게하는지 알아낼 수 없었다.

미리 감사드립니다.

답변

3

이상형은 변수 myRight을 생성 한 쿼리로 대체하는 것입니다. 코드를 순수 SQL로 옮기는 것입니다.

UPDATE nested_category SET rgt = rgt + 2 
WHERE rgt > (SELECT rgt 
      FROM nested_category 
      WHERE name = 'TELEVISIONS'); 

UPDATE nested_category SET lft = lft + 2 
WHERE lft > (SELECT rgt 
      FROM nested_category 
      WHERE name = 'TELEVISIONS'); 

INSERT INTO nested_category(name, lft, rgt) 
SELECT 'GAME CONSOLES', rgt + 1, rgt + 2 
FROM nested_category 
WHERE name = 'TELEVISIONS' ; 
관련 문제