php 数据库字段复用的基本原理与示例


Posted in PHP onJuly 22, 2011

一、逻辑代数基础:

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 相关文章推荐
PHP设计模式之命令模式的深入解析
Jun 13 PHP
PHP之短标签开启设置
Jun 17 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
php curl模拟post提交数据示例
Dec 31 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
Zend Framework基本页面布局分析
Mar 19 PHP
提交表单后 PHP获取提交内容的实现方法
May 25 PHP
Laravel5.* 打印出执行的sql语句的方法
Jul 24 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
PHP中soap用法示例【SoapServer服务端与SoapClient客户端编写】
Dec 25 PHP
通过代码实例解析PHP session工作原理
Dec 11 PHP
PHP查询MySQL大量数据的时候内存占用分析
Jul 22 #PHP
PHP性能优化 产生高度优化代码
Jul 22 #PHP
PHP多个版本的分析解释
Jul 21 #PHP
QQ登录 PHP OAuth示例代码
Jul 20 #PHP
模板引擎正则表达式调试小技巧
Jul 20 #PHP
php中批量替换文件名的实现代码
Jul 20 #PHP
关于php连接mssql:pdo odbc sql server
Jul 20 #PHP
You might like
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
php生成Android客户端扫描可登录的二维码
2016/05/13 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
JQuery this 和 $(this) 的区别
2009/08/23 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
Jquery获得控件值的三种方法总结
2014/02/13 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
javascript replace()第二个参数为函数时的参数用法
2016/12/26 Javascript
Node.js微信 access_token ( jsapi_ticket ) 存取与刷新的示例
2017/09/30 Javascript
vue watch监听对象及对应值的变化详解
2018/02/24 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
详解JavaScript中new操作符的解析和实现
2020/09/04 Javascript
详解node.js创建一个web服务器(Server)的详细步骤
2021/01/15 Javascript
[02:28]DOTA2亚洲邀请赛 LGD战队巡礼
2015/02/03 DOTA
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
详谈python read readline readlines的区别
2017/09/22 Python
对Python subprocess.Popen子进程管道阻塞详解
2018/10/29 Python
python爬取内容存入Excel实例
2019/02/20 Python
Python实现截取PDF文件中的几页代码实例
2019/03/11 Python
局域网内python socket实现windows与linux间的消息传送
2019/04/19 Python
使用pytorch 筛选出一定范围的值
2020/06/28 Python
django rest framework 过滤时间操作
2020/07/12 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
几个CSS3的flex弹性盒模型布局的简单例子演示
2016/05/12 HTML / CSS
软件测试笔试题
2012/10/25 面试题
金融管理应届生求职信
2014/02/20 职场文书
人民教师的自我评价分享
2014/02/21 职场文书
法律系毕业生自荐信范文
2014/03/27 职场文书
说明书范文
2014/05/07 职场文书
毕业生求职信
2014/06/10 职场文书
2015年市场部工作总结
2015/04/30 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
承诺书应该怎么写?
2019/09/10 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python