2011-09-30 3 views
3

J'essaie d'implémenter le modèle imbriqué pour une base de données sqlite. Jusqu'ici j'ai implémenté obtenir des noeuds de feuille, trouver des subordonnés etc. J'utilise le tutoriel this comme référence Cependant, je suis bloqué à l'insertion d'un nouveau noeud. Voici le code du siteJeu imbriqué opération INSERT pour SQLite

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; 

Je sais qu'il n'y a pas de table de verrouillage dans sqlite .. ici mon problème est que je dois passer le résultat de la première requête à la suivante. Ici, c'est fait en utilisant une variable créée par l'utilisateur par @. Je ne pouvais pas comprendre comment le faire dans SQLite.

Merci d'avance.

Répondre

3

Une idée consiste à remplacer la variable myRight par la requête qui l'a généré. Cela revient à déplacer le code en SQL pur.

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' ;