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中Smarty模板初体验
Aug 08 PHP
php开发留言板的CRUD(增,删,改,查)操作
Apr 19 PHP
深入PHP curl参数的详解
Jun 17 PHP
php命令行(cli)下执行PHP脚本文件的相对路径的问题解决方法
May 25 PHP
php中 $$str 中 "$$" 的详解
Jul 06 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
php自定义函数br2nl实现将html中br换行符转换为文本输入中换行符的方法【与函数nl2br功能相反】
Feb 17 PHP
使用Zttp简化Guzzle 调用
Jul 02 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
PHP实现的简单路由和类自动加载功能
Mar 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
收音机发烧友应当熟知的100条知识
2021/03/02 无线电
PHP实现邮件群发的源码
2013/06/18 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
php发送邮件的问题详解
2015/06/22 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
利用php输出不同的心形图案
2016/04/22 PHP
php中namespace及use用法分析
2016/12/06 PHP
滚动条变色 隐藏滚动条与双击网页自动滚屏显示代码
2009/12/28 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
详解JS函数重载
2014/12/04 Javascript
javascript实现拖放效果
2015/12/16 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
vue2.0中goods选购栏滚动算法的实现代码
2017/05/17 Javascript
Vue 中使用vue2-highcharts实现top功能的示例
2018/03/05 Javascript
浅谈VUE单页应用首屏加载速度优化方案
2018/08/28 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
element中的$confirm的使用
2020/04/26 Javascript
Vue2.0 $set()的正确使用详解
2020/07/28 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
[01:08:48]LGD vs OG 2018国际邀请赛淘汰赛BO3 第三场 8.25
2018/08/29 DOTA
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
ZABBIX3.2使用python脚本实现监控报表的方法
2019/07/02 Python
使用Python和百度语音识别生成视频字幕的实现
2020/04/09 Python
美国最顶级的精品店之一:Hampden Clothing
2016/12/22 全球购物
利物浦足球俱乐部官方网上商店:Liverpool FC Official Store
2018/01/13 全球购物
Raffaello Network德国:意大利拉斐尔时尚购物网
2019/05/01 全球购物
大一自我鉴定范文
2013/10/04 职场文书
乔迁之喜主持词
2014/03/27 职场文书
工厂采购员岗位职责
2014/04/08 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
乡镇遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
Python 用户输入和while循环的操作
2021/05/23 Python