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 相关文章推荐
phplock(php进程锁) v1.0 beta1
Nov 24 PHP
ThinkPHP采用模块和操作分析
Apr 18 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
基于empty函数的输出详解
Jun 17 PHP
解析php中获取系统信息的方法
Jun 25 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
Apr 17 PHP
PHP中is_file()函数使用指南
May 08 PHP
php将远程图片保存到本地服务器的实现代码
Aug 03 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
php基于数组函数实现关联表的编辑操作示例
Jul 04 PHP
jQuery+PHP实现图片上传并提交功能
Jul 27 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
PHP jQuery表单,带验证具体实现方法
2014/02/15 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
php时间戳转换的示例
2014/03/31 PHP
PHP中static关键字以及与self关键字的区别
2015/07/01 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
ASP.NET jQuery 实例1(在TextBox里面创建一个默认提示)
2012/01/13 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
Javascript实现div的toggle效果实例分析
2015/06/09 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
深入学习jQuery中的data()
2016/12/22 Javascript
原生JavaScript实现Ajax异步请求
2017/11/19 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
vue树形结构获取键值的方法示例
2018/06/21 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
用vue-cli开发vue时的代理设置方法
2018/09/20 Javascript
详解django模板与vue.js冲突问题
2019/07/07 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
Python获取电脑硬件信息及状态的实现方法
2014/08/29 Python
python操作xlsx文件的包openpyxl实例
2018/05/03 Python
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
详解python中的线程与线程池
2019/05/10 Python
python使用协程实现并发操作的方法详解
2019/12/27 Python
python定义类self用法实例解析
2020/01/22 Python
解决flask接口返回的内容中文乱码的问题
2020/04/03 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
CSS3径向渐变之大鱼吃小鱼之孤单的大鱼
2016/04/26 HTML / CSS
HTML5 localStorage使用总结
2017/02/22 HTML / CSS
Bonami斯洛伐克:购买家具和家居饰品
2019/07/02 全球购物
Omio英国:搜索并比较便宜的巴士、火车和飞机
2019/08/27 全球购物
主管职责范文
2013/11/09 职场文书
求职自荐信格式
2013/12/04 职场文书
劳动模范获奖感言
2015/07/31 职场文书
讲解Python实例练习逆序输出字符串
2022/05/06 Python