2011-09-30 55 views
3

我正試圖爲sqlite數據庫實現嵌套集模型。 到目前爲止,我已經實現了獲取葉節點,查找下屬等。 我使用this教程作爲參考 但是,我堅持插入一個新節點。 下面是從網站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的..我這裏的問題是,我需要第一個查詢的結果傳遞給下一個。這是通過@使用用戶創建的變量完成的。我無法弄清楚如何在SQLite中做到這一點。

在此先感謝。

回答

3

一個ideea是用生成它的查詢替換變量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' ;