php 数据库字段复用的基本原理与示例
2015-01-24信息快讯网
php 数据库字段复用的基本原理与示例,需要的朋友可以参考下。
一、逻辑代数基础: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 curl基本操作详解
PHP的基本常识小结
解析thinkphp基本配置 convention.php
php创建基本身份认证站点的方法详解
PHP对MongoDB[NoSQL]数据库的操作
phpExcel导出大量数据出现内存溢出错误的解决方法
php和js如何通过json互相传递数据相关问题探讨
php连接mssql数据库的几种方法
PHP递归算法的详细示例分析
phpadmin如何导入导出大数据文件及php.ini参数修改
php mssql扩展SQL查询中文字段名解决方法
查找mysql字段中固定字符串并替换的几个方法
PHP连接MongoDB示例代码
php下载文件的代码示例
php面向对象 字段的声明与使用
MySQL时间字段究竟使用INT还是DateTime的说明
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
php XMLWriter类的简单示例代码(RSS输出)
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
php文档更新介绍
PHP查询MySQL大量数据的时候内存占用分析
QQ登录 PHP OAuth示例代码
php入门学习知识点八 PHP中for循环基本应用之九九乘法口绝表
php入门学习知识点七 PHP函数的基本应用
php入门学习知识点五 关于php数组的几个基本操作
php入门学习知识点四 PHP正则表达式基本应用
PHP 获取MySQL数据库里所有表的实现代码
PHP 数据结构 算法描述 冒泡排序 bubble sort
第4章 数据处理-php正则表达式-郑阿奇(续)
第4章 数据处理-php字符串的处理-郑阿奇(续)
php判断输入不超过mysql的varchar字段的长度范围
PHP 八种基本的数据类型小结
php 代码优化之经典示例
array_multisort实现PHP多维数组排序示例讲解
php中DOMDocument简单用法示例代码(XML创建、添加、删除、修改)
php header示例代码(推荐)
用sql命令修改数据表中的一个字段为非空(not null)的语句
mysql下创建字段并设置主键的php代码
DedeCMS dede_channeltype表字段注释