一、逻辑代数基础: 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,和加法类似。
二、逻辑运算示例: 01111010101010101111111111111111 & 1100000 = 1100000
一般可以理解为: 如果要获取一个数字某N位的数值,只需要将这个数字与2的N-1次方(掩码)进行与运算即可。
三、数据库字段定义: 以数据表 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}";
依此类推,只要定义好每个值的含义,查询基本上就定了。
分享到:
相关推荐
php 数据库字段复用的基本原理与示例,需要的朋友可以参考下。
DjangoORM基本创建基本类型以及生成数据库结构 DjangoORM使用mysql注意 DjangoORM基本增删查该 基于ORM实现用户登录 基于ORM实现用户增加删除修改以及查看详细 Django字段类型介绍 DjangoORM字段参数介绍 DjangoORM...
6.2 文档结构与基本语法 251 6.3 XML操作 253 6.3.1 XmlDocument创建XML文档 253 6.3.2 XmlTextWriter创建XML文档 254 6.3.3 XmlDocument读取XML文档 256 6.3.4 XmlTextReader读取XML文档 257 6.3.5 在HTML中显示XML...
6.2 文档结构与基本语法 251 6.3 XML操作 253 6.3.1 XmlDocument创建XML文档 253 6.3.2 XmlTextWriter创建XML文档 254 6.3.3 XmlDocument读取XML文档 256 6.3.4 XmlTextReader读取XML文档 257 6.3.5 在HTML中显示XML...
与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的...
2.3 Hello World示例 2.4 使用IDE 2.5 规约配置 2.6 运行Grails应用 2.7 测试Grails应用 2.8 部署Grails应用 2.9 所支持的Java EE容器 2.10 创建工件 2.11 生成Grails应用 3. 配置 3.1 基本配置 3.1.1 内置选项 ...
14.2.2数据库基本操作496 14.2.3开放式客户端批处理修改500 14.2.4使用Command对象504 14.2.5使用DataEnvironment设计器506 14.3高级技术510 14.3.1 Recordset事件510 14.3.2异步操作514 14.3.3保存过程516 14.3.4...
14.2.2数据库基本操作496 14.2.3开放式客户端批处理修改500 14.2.4使用Command对象504 14.2.5使用DataEnvironment设计器506 14.3高级技术510 14.3.1 Recordset事件510 14.3.2异步操作514 14.3.3保存过程516 14.3.4...
与 Visual FoxPro 以前的版本不同,这些示例将与所有 Visual Studio 示例安装在一起。您必须运行 MSDN Library 的“自定义”安装来安装这些示例。在 Visual FoxPro 中可使用新的 HOME(2) 函数方便地找到已安装示例的...
3. 建立与数据库对应的 java class,以及映射文件. 在src_user下建立package:com.yihaomen.mybatis.model ,并在这个 package 下建立 User 类: 程序代码 程序代码 package com.yihaomen.mybatis.model; public class...