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 相关文章推荐
Apache, PHP在Windows 9x/NT下的安装与配置 (一)
Oct 09 PHP
php产生随机数的两种方法实例代码 输出随机IP
Apr 08 PHP
win7计划任务定时执行PHP脚本设置图解
May 09 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
PHP实现文件下载断点续传详解
Oct 15 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
Nov 22 PHP
php利用scws实现mysql全文搜索功能的方法
Dec 25 PHP
Yii2 加载css、js 载静态资源的方法
Mar 10 PHP
php实现与python进行socket通信的方法示例
Aug 30 PHP
PHP设计模式之原型模式定义与用法详解
Apr 03 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
使用SMB共享来绕过php远程文件包含的限制执行RFI的利用
May 31 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
用户的详细注册和判断
2006/10/09 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
PHP实现微信退款功能
2018/10/02 PHP
PHP实现简单用户登录界面
2019/10/23 PHP
laravel 实现根据字段不同值做不同查询
2019/10/23 PHP
JavaScript取得鼠标绝对位置程序代码介绍
2012/09/16 Javascript
JS判断两个时间大小的示例代码
2014/01/28 Javascript
JavaScript中Form表单技术汇总(推荐)
2016/06/26 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
jQuery Validation Engine验证控件调用外部函数验证的方法
2017/01/18 Javascript
ES6新特性之函数的扩展实例详解
2017/04/01 Javascript
Vue集成Iframe页面的方法示例
2017/12/12 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
使用Vue-cli 3.0搭建Vue项目的方法
2018/06/07 Javascript
微信小程序异步API为Promise简化异步编程的操作方法
2018/08/14 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
JQuery样式操作、click事件以及索引值-选项卡应用示例
2019/05/14 jQuery
JavaScript this使用方法图解
2020/02/04 Javascript
React中Ref 的使用方法详解
2020/04/28 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
浅析PyTorch中nn.Linear的使用
2019/08/18 Python
Python处理session的方法整理
2019/08/29 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
2020/10/15 Python
CSS3等相关属性制作分页导航实现代码
2012/12/24 HTML / CSS
CSS3制作hover下划线动画
2017/03/27 HTML / CSS
自主招生自荐信
2013/12/08 职场文书
《黄河颂》教学反思
2014/02/07 职场文书
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
校外活动方案
2014/08/28 职场文书
2015大学党建带团建工作总结
2015/07/23 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers