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 相关文章推荐
杏林同学录(九)
Oct 09 PHP
php 大数据量及海量数据处理算法总结
May 07 PHP
让Json更懂中文(JSON_UNESCAPED_UNICODE)
Oct 27 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
Jun 03 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
跟我学Laravel之视图 & Response
Oct 15 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP处理数组和XML之间的互相转换
Jun 02 PHP
php监测数据是否成功插入到Mysql数据库的方法
Nov 25 PHP
ThinkPHP实现附件上传功能
Apr 27 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
基于PHP的登录和注册的功能的实现
Aug 06 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设计模式 Bridge (桥接模式)
2011/06/26 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
Laravel框架基于ajax和layer.js实现无刷新删除功能示例
2019/01/17 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
jquery创建div 实现代码
2009/04/27 Javascript
检测input每次的输入是否合法遇到汉字输入就有问题
2012/05/23 Javascript
JS如何将UTC格式时间转本地格式
2013/09/04 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
JavaScript按值删除数组元素的方法
2015/04/24 Javascript
avalonjs制作响应式瀑布流特效
2015/05/06 Javascript
基于Jquery实现万圣节快乐特效
2015/11/01 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
JS封装的选项卡TAB切换效果示例
2016/09/20 Javascript
微信小程序 两种滑动方式(横向滑动,竖向滑动)详细及实例代码
2017/01/13 Javascript
简单谈谈gulp-changed插件
2017/02/21 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
基于zepto.js实现登录界面
2017/10/09 Javascript
JS常用的几种数组遍历方式以及性能分析对比实例详解
2018/04/11 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
jquery ui 实现 tab标签功能示例【测试可用】
2019/07/25 jQuery
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
[05:06]2017亚洲邀请赛DAC回顾片
2017/04/19 DOTA
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
python机器人运动范围问题的解答
2019/04/29 Python
python点击鼠标获取坐标(Graphics)
2019/08/10 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
美国创意之家:BulbHead
2017/07/12 全球购物
Pedro官网:新加坡时尚品牌
2019/08/27 全球购物