实施例相结合:如何既更新
UPDATE images set show = 0 where show =1;
UPDATE images set show = 1 where id = $id;
“显示”是布尔数字0或1,因为只有1图像可以在所有时间显示。 我想用于事件,当我使用上面的代码时,将显示错误: “MySQL说:#1064 - 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,使用” 那么,如何上述编码
实施例相结合:如何既更新
UPDATE images set show = 0 where show =1;
UPDATE images set show = 1 where id = $id;
“显示”是布尔数字0或1,因为只有1图像可以在所有时间显示。 我想用于事件,当我使用上面的代码时,将显示错误: “MySQL说:#1064 - 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,使用” 那么,如何上述编码
在MySQL show
是reserved 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;
结合试试这个:
UPDATE images SET show = (CASE
WHEN show = 1 THEN 0
WHEN id = $id THEN 1
END) WHERE (show =1 OR id = $id);
请尝试以下代码。
UPDATE images SET `show` = CASE
WHEN `show` = 1 THEN 0
WHEN id =$id THEN 1
END;
希望这会有所帮助。
因为这是一个例子,'show'是一个保留字,我知道,但我真正的词是不同的。并且,谢谢你,这是工作 – Ricky
但我认为有一个问题,因为当$ 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
好吧,最后得到你的问题。如果将该标志设置为现有记录,则单个更新将永远不起作用,因为单个更新语句从不触及相同的记录两次。如果标记的记录没有更改,则不应首先发布更新声明。 – Shadow