Mysql部分
MySQL 字段设置int类型 0填充 有1的地方代表设置了标签,每个位置的1代表的意思需要确定好,最好只增不减否则后果比较难处理。
例如:设置两条数据 假设字段名是flag
数据1: 10000101
数据2: 00000110
想要查询 符合条件的数据(第一位是1的),运行如下sql 就可以了
SELECT * FROM table WHERE flag & 0000001
如果想要查询出第二三位是1但第一位是0的 就不能用上面的sql了,这样会把两条数据都查询出来,我们应该使用下面的sql
#错误的sql
SELECT * FROM table WHERE flag & 0000110 #这个sql会把两条都查询出来
#正确的sql
SELECT * FROM table WHERE (flag & 0000110) = 0000110
php部分
设置二进制数指定位置的值
设置
设置为1
#$flag 二进制的数
#$n要设置1的位置 从0开始
decbin(Bindec($flag) | (1 << $n));
设置为0
#$flag 二进制的数
#$n要设置0的位置 从0开始
decbin(Bindec($flag) & (~(1 << $n)));
获取指定位置的值是0
#$flag 二进制的数
#$n从1开始
$num = Bindec($flag);
$digit = $n-1;
return ($num & (1<<$digit))>>$digit;
如有错误,希望看到的小伙伴,指出来,谢谢