是否可以在同一查询中对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
然而,这只会产生语法错误。
有人能在一个查询中同时运行这两个查询吗
编辑和解决方案
我很接近上面的问题,把它们结合在一起。感谢@SylvainLenoux在下面的回答中让我了解了正确的语法。正确的工作说明是:
UPDATE products
SET pStatus = (pStatus ^ 1) | 64
WHERE pId = 66
位运算符(^
、|
、&
)是普通运算符。你可以把它们组合起来。你试过吗:
UPDATE products
SET pStatus = (pStatus ^ 1) | 64
WHERE pId = 66;