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&mysql(四)
Oct 09 PHP
PHP4中session登录页面的应用
Jul 25 PHP
php面向对象全攻略 (五) 封装性
Sep 30 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
php检测网页是否被百度收录的函数代码
Oct 09 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
Dec 16 PHP
Zend Framework动作助手Json用法实例分析
Mar 05 PHP
php使用文本统计访问量的方法
May 12 PHP
php生成与读取excel文件
Oct 14 PHP
Yii2――使用数据库操作汇总(增删查改、事务)
Dec 19 PHP
Yii2中添加全局函数的方法分析
May 04 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 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隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
php中$_GET与$_POST过滤sql注入的方法
2014/11/03 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
JS.findElementById()使用介绍
2013/09/21 Javascript
jQuery中[attribute!=value]选择器用法实例
2014/12/31 Javascript
Javascript监视变量变化的方法
2015/06/09 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
JavaScript实现cookie的写入、读取、删除功能
2015/11/05 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
vue实现通讯录功能
2018/07/14 Javascript
从vue源码看props的用法
2019/01/09 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
微信小程序保持session会话的方法
2020/03/20 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
django使用JWT保存用户登录信息
2020/04/22 Python
ITK 实现多张图像转成单个nii.gz或mha文件案例
2020/07/01 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
Python爬虫简单运用爬取代理IP的实现
2020/12/01 Python
详解Python模块化编程与装饰器
2021/01/16 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
微信端html5页面调用分享接口示例
2018/03/14 HTML / CSS
车间组长岗位职责
2013/12/20 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
交通工程专业推荐信
2014/09/06 职场文书
信用卡工作证明模板
2014/09/14 职场文书
个人融资协议书范本两则
2014/10/15 职场文书
人事局接收函
2015/01/30 职场文书
薪资证明范本
2015/06/19 职场文书
2015年大学组织委员个人工作总结
2015/10/23 职场文书