0

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

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;

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

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

4

1 回答 1

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);
于 2013-08-01T17:05:01.550 回答