0

是否可以在同一个查询中对 MySQLi 中的单个列执行两个按位操作?

我有一个名为 status 的列,该列包含各种不同的标志,从 1 到 64(目前,这可能会增长)。在一个查询中,我想清除我知道已设置的第一个标志,然后设置我不知道其状态的最后一个标志。我知道我需要执行的操作,XOR第一个操作和OR最后一个操作,但是我可以在一个查询中执行这两个操作吗?

起初我以为我可以使用CASE下面这样的示例:

UPDATE products 
SET pStatus = CASE pId 
    WHEN 66 THEN pStatus ^ 1 
    WHEN 66 THEN pStatus | 64 
END 
WHERE pId IN (66);

然而,这只是运行第一个XOR,而不是第二个OR

我还认为您可以一个接一个地运行这两个功能,如下所示:

UPDATE products 
SET pStatus ^ 1 | 64 
WHERE pId = 66

但是,这只会产生语法错误。

有没有人可以在一个查询中同时运行两者的解决方案?


编辑和解决方案

我很接近上面的查询,将它们组合在一起。感谢@SylvainLeroux 让我在下面给出了正确的语法。正确的工作语句是:

UPDATE products 
SET pStatus = (pStatus ^ 1) | 64 
WHERE pId = 66
4

1 回答 1

2

位运算符 ( ^, |, &) 是普通运算符。你可以把它们结合起来。您是否尝试过:

UPDATE products 
SET pStatus = (pStatus ^ 1) | 64 
WHERE pId = 66;
于 2013-08-20T16:32:30.253 回答