在一个MySQLi查询中对列执行两个按位运算?

时间:2013-08-20 15:46:04

标签: php mysql mysqli bitwise-operators

是否可以在同一查询中对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

1 个答案:

答案 0 :(得分:2)

按位运算符(^|&)是普通运算符。你可以结合它们。你试过那个:

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