在锁表中使用CASE来表示多个语句

时间:2013-08-01 16:50:52

标签: mysql case

我需要一些好心灵的帮助,我正在尝试在锁定表块中创建一个mysql查询(或执行一些代码),基于我需要执行子块1或其他的一些结果,我是到目前为止我计划使用CASE这个

SELECT @myRight := node.rgt, @myLeft := node.lft, @nivel := node.nivel_pag, @grp := node.grp
FROM `tbl_pages_temp` AS node, `tbl_pages_temp` AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt AND parent.id_pag = 38 AND node.grp =    parent.grp AND node.id_pag != parent.id_pag
ORDER BY node.lft DESC LIMIT 1;

#here I want to use CASE or something else so, if @grp > 1 then do updates/insert block1 otherwise do second block
#block 1
UPDATE tbl_pages_temp SET rgt = rgt + 2 WHERE rgt > @myRight;

UPDATE tbl_pages_temp SET lft = lft + 2 WHERE lft > @myRight;

INSERT INTO tbl_pages_temp(menu_pag, lft, rgt, nivel_pag, grp) VALUES('GAME CONSOLES', @myRight + 1, @myRight + 2, @nivel + 1, @grp);

#block 2
UPDATE tbl_pages_temp SET rgt = rgt + 2 WHERE rgt > @myLeft;

UPDATE tbl_pages_temp SET lft = left + 2 WHERE lft > @myLeft;

INSERT INTO tbl_pages_temp(menu_pag, lft, rgt, nivel_pag, grp) VALUES('GAME CONSOLES', @myLeft + 1, @myLeft + 2, @nivel + 1, @grp);

UNLOCK TABLES;

我不能在这个DB上使用存储过程,我这样做是对还是有更好的方法? 感谢!!!

我的不好,是的,想法是使用一个参数或另一个取决于@grp值,是的我假设cose可以更紧凑,让我尝试两个答案,看起来都很好

1 个答案:

答案 0 :(得分:0)

似乎更新中的差异只是拼写错误,只有INSERT应该有所不同。在这种情况下,使用单个语句执行这两种情况相当简单;

INSERT INTO tbl_pages_temp(menu_pag, lft, rgt, nivel_pag, grp) 
    VALUES('GAME CONSOLES', 
           CASE WHEN @grp > 1 THEN @myRight + 1 ELSE @myLeft + 1 END,
           CASE WHEN @grp > 1 THEN @myRight + 2 ELSE @myLeft + 2 END,
           @nivel + 1, @grp);