假设我在状态中有三位标志,作为整数存储在 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/