php - 状态位标志。查找一个标志 = 0 的状态

标签 php mysql bit-manipulation

假设我在状态中有三位标志,作为整数存储在 mysql 中

Approved    Has Result    Finished
0|1         0|1           0|1

现在我想查找状态为:Finished = 1、Has Result = 1 和 Approved = 0 的行。

然后是数据:

0 "000"
1 "001"
3 "011"
7 "111"

应该产生

false
false
true
false

我可以做类似的事情吗? (在 mysql 中)

status & "011" AND ~((bool) status & "100")

不太明白如何查询“Approved = 0”。

或者我应该完全放弃使用位标志,并将它们分成单独的列吗?

使用位标志的部分原因是为了 mysql 性能。

最佳答案

使用整数而不是二进制文本。使用 3 而不是 011

获取批准的行:

SELECT
    *
FROM
    `foo`
WHERE
    (`status` & 4)

或批准和完成的行:

SELECT
    *
FROM
    `foo`
WHERE
    (`status` & 5)

或完成但未被接受:

SELECT
    *
FROM
    `foo`
WHERE
    (`status` & 1)
AND
    (`status` ^ 4)

Finished = 1, Has Result = 1 and Approved = 0”可以像 status = 3 一样简单。

关于php - 状态位标志。查找一个标志 = 0 的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20802593/

相关文章:

javascript - 如何在 JavaScript 中对任意长的位序列进行 popcount 或计数

mysql - UPDATE 语句是否同时(同时)设置所有值?

java - Java中的位级操作/Java中的reterpreted_cast<>?

c++ - 确定数的幂

php - 在php中使用get可以发送多少个字符

mysql - 数据库邻接列表模型 - 在一个查询中获取所有相同级别的父级?

当连接与行不匹配时,MySql 使用连接返回数据

javascript - 文件无法使用 PHP 和 angular.js 上传到文件夹

PHP ceil 函数的奇怪行为?

javascript - PHP 数组通过 xmlHttp.responseText 转为 JavaScript