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 遍历XP文件夹下所有文件
Nov 27 PHP
php 远程关机操作的代码
Dec 05 PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 PHP
php保存信息到当前Session的方法
Mar 16 PHP
PHP中的魔术方法总结和使用实例
May 11 PHP
PHP的伪随机数与真随机数详解
May 27 PHP
thinkPHP中create方法与令牌验证实例浅析
Dec 08 PHP
必须收藏的php实用代码片段
Feb 02 PHP
利用Homestead快速运行一个Laravel项目的方法详解
Nov 14 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 PHP
PHP扩展Swoole实现实时异步任务队列示例
Apr 13 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中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHP获取mysql数据表的字段名称和详细信息的方法
2014/09/27 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
javascript编程起步(第七课)
2007/01/10 Javascript
Javascript 判断Flash是否加载完成的代码
2010/04/12 Javascript
jQuery表格列宽可拖拽改变且兼容firfox
2014/09/03 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
JS+CSS实现闪烁字体效果代码
2016/04/05 Javascript
JavaScript和jquery获取父级元素、子级元素、兄弟元素的方法
2016/06/05 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
Angular2中Bootstrap界面库ng-bootstrap详解
2016/10/18 Javascript
JavaScript prototype属性详解
2016/10/25 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
Iview Table组件中各种组件扩展的使用
2018/10/20 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
js函数柯里化的方法和作用实例分析
2020/04/11 Javascript
[43:32]Winstrike vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python计算最大优先级队列实例
2013/12/18 Python
python高手之路python处理excel文件(方法汇总)
2016/01/07 Python
python爬虫系列Selenium定向爬取虎扑篮球图片详解
2017/11/15 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
python实现排序算法解析
2018/09/08 Python
使用CSS3的rem属性制作响应式页面布局的要点解析
2016/05/24 HTML / CSS
HTML5 Canvas实现烟花绽放特效
2016/03/02 HTML / CSS
悦木之源美国官网:Origins美国
2016/08/01 全球购物
Cecil Mode法国在线商店:女性时尚
2021/01/08 全球购物
质检员的岗位职责
2013/11/15 职场文书
运动会广播稿60字
2014/01/15 职场文书
12岁生日感言
2014/01/21 职场文书
高中地理教学反思
2014/01/29 职场文书
医学专业毕业生求职信
2014/06/20 职场文书
2015年外贸业务员工作总结范文
2015/05/23 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书