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 开发环境配置(Zend Studio)
Apr 28 PHP
PHP中isset()和unset()函数的用法小结
Mar 11 PHP
php单例模式示例分享
Feb 12 PHP
php检查日期函数checkdate用法实例
Mar 19 PHP
php中文繁体和简体相互转换的方法
Mar 21 PHP
PHP安全上传图片的方法
Mar 21 PHP
php实现用于验证所有类型的信用卡类
Mar 24 PHP
php中memcache 基本操作实例
May 17 PHP
PHP信号量基本用法实例详解
Feb 12 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
Nov 01 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP操作Redis常用命令的实例详解
Dec 23 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 pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
PHP设计模式之 策略模式Strategy详解【对象行为型】
2020/05/01 PHP
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
jquery next nextAll nextUntil siblings的区别介绍
2013/10/05 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
javascript伸缩菜单栏实现代码分享
2015/11/12 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
node.js实现爬虫教程
2020/08/25 Javascript
JavaScript中的原型继承基础学习教程
2016/05/06 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
利用JS动态生成隔行换色HTML表格的两种方法
2018/10/09 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
js实现消灭星星(web简易版)
2020/03/24 Javascript
python的类方法和静态方法
2014/12/13 Python
Django框架模板用法入门教程
2019/11/04 Python
Python连接Oracle之环境配置、实例代码及报错解决方法详解
2020/02/11 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
Java多线程实现四种方式原理详解
2020/06/02 Python
python之pygame模块实现飞机大战完整代码
2020/11/29 Python
纯CSS3实现表单验证效果(非常不错)
2017/01/18 HTML / CSS
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
如何执行一个shell程序
2012/11/23 面试题
业务经理的岗位职责
2013/11/16 职场文书
大学生创业计划书的用途
2014/01/08 职场文书
求职简历的自我评价
2014/01/31 职场文书
高校群众路线教育实践活动剖析材料
2014/10/10 职场文书
2015年大学生村官工作总结
2015/04/21 职场文书
教师思想工作总结2015
2015/05/13 职场文书
2015年敬老院工作总结
2015/05/18 职场文书
2016应届毕业生实习心得体会
2015/10/09 职场文书
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis
python使用torch随机初始化参数
2022/03/22 Python
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL