按位运算的替代方案

时间:2011-07-05 11:23:57

标签: mysql logic

场景:  我说有4个复选框,用户可以选择任意组合的复选框(他们也有权不选择一个复选框)。我必须将这4个选项存储到单个列中。我认为最好的选择是使用二进制表示存储

option1 has the constant value 1 
option2 has the constant value 2
option3 has the constant value 4
option4 has the constant value 8

因此,如果客户选择option2和option4,则存储在DB中的值将为2 + 8,即:10,如果客户选择option1,option4和option8,则值为1 + 4 + 8,即13 。

当我从mysql查询时,我可以使用

Select * from option_table where (option & 4)=4;

如果我想要检索选择了option3的行。

但由于某些原因我不能使用这种方法,或者只是说我需要知道将这些多个值存储在一个列中的下一个最佳选择是什么?

2 个答案:

答案 0 :(得分:7)

另一种选择可能是乘以素数。要选择,您可以选择将素数的模数加到列的值为0的列。

示例:

价值1:2
价值2:3
价值3:5
价值4:7

价值2& 3将是3 * 5 = 15
值1,2,3,4将是2 * 3 * 5 * 7 = 210

要获取值1所在的行,请选择value % 2 == 0

的位置

答案 1 :(得分:1)

只要位数不等于该列类型的位长,就可以始终使用此方法。如果有更多位要存储,则可以使用多个列(字段)。

您也可以使用Bit Fields