Mysql二分查找

标签 mysql binary bit-manipulation

情况

我想转换 PHP/MySQL 应用程序中的某些状态字段,以便随时处理多个状态字段。下面以当前的 ENUM 字段为例:

STATUS_ACTIVE
STATUS_FROZEN
STATUS_PENDING
STATUS_FLAGGED
STATUS_DELETED

目前,一次仅支持一个。然而,通过将集合转换为二进制,我最终得到了一组字符串。

1     STATUS_ACTIVE
10    STATUS_FROZEN
100   STATUS_PENDING
1000  STATUS_FLAGGED
10000 STATUS_DELETED

现在,当涉及到 PHP 明智的过滤时,我没有任何问题。然而,这会带来大量(且不必要的)开销。条目很可能最终会变成

10010
01110
etc.

问题

我做了一些挖掘,我发现的最好的信息实际上是在 stackoverflow 上(讽刺的是)here . 有人可以解释一下那里使用的实际语法或者给我指出正确的 MySQL 手册页吗。

目前还不清楚假设如何处理这些情况:

Changing only the third bit
Searching for 1 on only the fourth bit
Updating two binary flags at the same time

如果能在正确的方向上敲一下,我将不胜感激,感谢您的阅读。

编辑:我已经弄清楚了大部分语法。我现在的问题是:是否可以一次更改多个位,而不必重新定义整个事物?

I.e

100 -> 1011
1 -> 101

最佳答案

回答您更新的问题。例如我们需要 3 位和 5 位。

如果您需要设置 3 和 5 位,您应该将您的字段与 10100 进行运算

UPDATE table SET options = options | ((1 << 2) | (1 << 4))

如果您需要清除 3 位和 5 位,您应该使用 AND 字段 11101011 = NOT(10100)

UPDATE table SET options = options & (~((1 << 2) | (1 << 4)))

关于Mysql二分查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14253658/

相关文章:

c# - 手动实例化的 SessionState 提供程序的问题

java - 在java中将十进制转换为二进制时遇到反转顺序问题

c - 无论内容如何,​​写入给定字节数的字符串

python - 从 Python 编写真正的原始二进制文件

java - 将 C 源 CRC16CITT 函数转换为 Java

c++ - 设置和取消设置 64 位整数中的特定位

php - 去除带有外国口音的 MySQL 查询

php - LOAD 数据文件不导入日期时间

php - 切换数据库mysql中的所有二进制值

floating-point - 在纯 Lua 中解析 IEEE754 double float ?