2017-03-01 14 views
0

实施例相结合:如何既更新

UPDATE images set show = 0 where show =1; 
UPDATE images set show = 1 where id = $id; 

“显示”是布尔数字0或1,因为只有1图像可以在所有时间显示。 我想用于事件,当我使用上面的代码时,将显示错误: “MySQL说:#1064 - 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,使用” 那么,如何上述编码

回答

2

在MySQL showreserved word,因此,你需要把反引号围绕它,如果你想使用它作为一个字段名。

UPDATE images set `show` = 0 where show =1; 
UPDATE images set `show` = 1 where id = $id; 

我不会将它们组合成一个单一的更新语句,它不会是有效的,因为一个单一的更新不是真的就可以使用索引,而这2个更新会。

然而,你可以将它们组合起来,如果你真的想:

UPDATE images SET `show`=if(`show`=1,0,1) 
WHERE `show`=1 OR ID=$id; 
+0

因为这是一个例子,'show'是一个保留字,我知道,但我真正的词是不同的。并且,谢谢你,这是工作 – Ricky

+0

但我认为有一个问题,因为当$ id是一样的,那么将成为所有的0.例如:id = 1,show = 0; id = 2,show = 1,id = 3,show = 0;当我使用更新图像SET'show' = if('show' = 1,0,1) WHERE'show' = 1 OR ID = 2;然后成为所有的节目都是0.只有一个节目是1 – Ricky

+0

好吧,最后得到你的问题。如果将该标志设置为现有记录,则单个更新将永远不起作用,因为单个更新语句从不触及相同的记录两次。如果标记的记录没有更改,则不应首先发布更新声明。 – Shadow

0

结合试试这个:

UPDATE images SET show = (CASE 
    WHEN show = 1 THEN 0 
    WHEN id = $id THEN 1 
    END) WHERE (show =1 OR id = $id); 
0

请尝试以下代码。

UPDATE images SET `show` = CASE 
    WHEN `show` = 1 THEN 0 
    WHEN id =$id THEN 1 
    END; 

希望这会有所帮助。