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 array_map array_multisort 高效处理多维数组排序
Jun 11 PHP
phpmyadmin3 安装配置图解教程
Mar 29 PHP
在wamp集成环境下升级php版本(实现方法)
Jul 01 PHP
zf框架的数据库追踪器使用示例
Mar 13 PHP
PHP生成短网址的3种方法代码实例
Jul 08 PHP
ThinkPHP表单自动验证实例
Oct 13 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
PHP使用array_fill定义多维数组的方法
Mar 18 PHP
PHP微信红包API接口
Dec 05 PHP
PHP数据的提交与过滤基本操作实例详解
Nov 11 PHP
PHP使用Redis长连接的方法详解
Feb 12 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
Dec 15 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下MAIL的另一解决方案
2006/10/09 PHP
将文件夹压缩成zip文件的php代码
2009/12/14 PHP
探讨Hessian在PHP中的使用分析
2013/06/13 PHP
php图片添加水印例子
2016/07/20 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
2013/12/22 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
nodejs npm package.json中文文档
2014/09/04 NodeJs
JavaScript原生对象之Date对象的属性和方法详解
2015/03/13 Javascript
Javascript实现获取及设置光标位置的方法
2015/07/21 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
详解jQuery中的empty、remove和detach
2016/04/11 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
jQuery获取Table某列的值(推荐)
2017/03/03 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
原生js实现无缝轮播图
2020/01/11 Javascript
原生javascript实现类似vue的数据绑定功能示例【观察者模式】
2020/02/24 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
Python实现的HMacMD5加密算法示例
2018/04/03 Python
对于Python深浅拷贝的理解
2019/07/29 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
python生成随机红包的实例写法
2019/09/02 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
大数据分析用java还是Python
2020/07/06 Python
使用CSS3制作版头动画效果
2020/12/24 HTML / CSS
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
巴西香水和化妆品购物网站:The Beauty Box
2019/09/03 全球购物
退休感言
2014/01/28 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
盗窃案辩护词
2015/05/21 职场文书
学校教师培训工作总结
2015/10/14 职场文书
JavaScript实现简单计时器
2021/06/22 Javascript