|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我是根据自己的成长历程来写的,如有不对的还请指正。 1、逻辑代数基本:
1,数字用二进制暗示,一切能够呈现的数只要0和1两个。
2,根基运算只要“与”、“或”、“非”三种。
与运算界说为:(用 & 暗示与运算)
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
可以复杂了解为:只需有一个0,了局就是0,和乘法相似。
或运算界说为:(用 暗示与运算)
0 0 = 0
0 1 = 1
1 0 = 1
1 1 = 1
可以复杂了解为:只需有一个1,了局就是1,和加法相似。
2、逻辑运算示例:
01111010101010101111111111111111 & 1100000 = 1100000
普通可以了解为:
假如要获得一个数字某N位的数值,只需求将这个数字与2的N-1次方(掩码)停止与运算便可。
3、数据库字段界说:
以数据表 binary_sample为例:
create table binary_sample(
uid int unsigned not null,
status int unsigned not null default 0,
primary key(uid),
key i_s(status)
)engine=innodb;
status字段界说:
status字段数据类型为32bit的整数,为了尽量的存储多个属性,咱们将其停止以下界说:
以下一切“位”的描写按次依照从低到高(从右到左)按次暗示。
0-2位暗示用户注册形态:
000 暗示新注册未被同意
001 暗示注册被同意
010 暗示位初级用户
011 暗示办理员
100 暗示超等办理员
101 保存
110 保存
111 掩码
3-5位用户性别:
000 暗示性别不肯定
001 暗示性别为男
010 暗示性别为女
011 保存
100 保存
101 保存
110 保存
111 掩码
假如咱们要查询一切 男用户 则:
select * from binary_sample where status & b'111000' = b'001000';
假如咱们要查询一切 办理员用户 则:
select * from binary_sample where status & b'111' = b'011';
假如咱们要查询一切 男办理员用户 则:
select * from binary_sample where status & b'111111' = b'001011';
假如咱们要查询一切 非 新注册未被同意用户 则:
select * from binary_sample where status & b'111' != b'000';
四,利用PHP法式停止此类盘算:
define("USER_NEW",0);//000
define("USER_NORMAL",1);//001
define("USER_ADVANCE",2);//010
define("USER_MANAGE",3);//011
define("USER_SUPER",4);//100
define("USER_MASK",7);//111
define("GENDER_UNKNOWN",0);// 000000
define("GENDER_MALE",8);// 001000
define("GENDER_FEMALE",9);// 010000
define("GENDER_MASK",56);// 111000
假如咱们要查询一切 男用户 则:
$status=GENDER_MALE;
$mask=GENDER_MASK;
$sql="select * from binary_sample where status & ${mask}' = ${status}";
假如咱们要查询一切 办理员用户 则:
$status=USER_MANAGE;
$mask=USER_MASK;
$sql="select * from binary_sample where status & ${mask}' = ${status}";
假如咱们要查询一切 男办理员用户 则:
$status=GENDER_MALE & USER_MANAGE;
$mask = GENDER_MASK & GENDER_MASK;
$sql="select * from binary_sample where status & ${mask}' = ${status}";
假如咱们要查询一切 非 新注册未被同意用户 则:
$status = USER_NEW;
$mask = USER_MASK;
$sql="select * from binary_sample where status & ${mask} != ${status}";
依此类推,只需界说好每一个值的寄义,查询根基上就定了。
<P style="TEXT-INDENT: 2em">
我是根据自己的成长历程来写的,如有不对的还请指正。 |
|