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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
Nov 18 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
session在PHP大型web应用中的使用
Jun 25 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
详细解读PHP的Yii框架中登陆功能的实现
Aug 21 PHP
PHP构造函数与析构函数用法示例
Sep 28 PHP
PHP批量获取网页中所有固定种子链接的方法
Nov 18 PHP
CI框架实现框架前后端分离的方法详解
Dec 30 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
php多进程应用场景实例详解
Jul 22 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
Mar 26 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
PHP中Date()时间日期函数的使用方法小结
2011/04/20 PHP
php返回字符串中所有单词的方法
2015/03/09 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
javascript采用数组实现tab菜单切换效果
2012/12/12 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
2013/01/15 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
表单序列化与jq中的serialize使用示例
2014/02/21 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
Python模块学习 datetime介绍
2012/08/27 Python
Python入门篇之函数
2014/10/20 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python中的复制操作及copy模块中的浅拷贝与深拷贝方法
2016/07/02 Python
python 全文检索引擎详解
2017/04/25 Python
python使用Pycharm创建一个Django项目
2018/03/05 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
Python之文字转图片方法
2018/05/10 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
2018/05/18 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
python实现通过flask和前端进行数据收发
2019/08/22 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
一款基于css3麻将筛子3D翻转特效的实例教程
2014/12/31 HTML / CSS
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
竞选演讲稿范文大全
2014/05/12 职场文书
客房部经理岗位职责
2015/02/02 职场文书
小学班主任工作总结2015
2015/04/07 职场文书
用人单位的规章制度,怎样制定才是有效的?
2019/07/09 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
python opencv通过按键采集图片源码
2021/05/20 Python
Java 超详细讲解数据结构中的堆的应用
2022/04/02 Java/Android
Java界面编程实现界面跳转
2022/06/16 Java/Android