【问题标题】:Perform two bitwise operations on a column in one MySQLi query?在一个 MySQLi 查询中对列执行两次按位运算?
【发布时间】:2013-08-20 15:46:03
【问题描述】:

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

【问题讨论】:

  • 请缩进您的查询,以便(更)清楚您在哪里进行分组。
  • @hakre 我已经更新了我的问题。

标签: php mysql mysqli bitwise-operators


【解决方案1】:

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

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

【讨论】:

  • 我没有尝试使用括号,不,但这仍然会产生语法错误。
  • 忽略我最后的评论,我还没有完成pStatus = 要么>.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 2016-07-10
  • 1970-01-01
  • 1970-01-01
  • 2020-03-24
  • 2013-09-01
  • 1970-01-01
相关资源
最近更新 更多