`
webcode
  • 浏览: 5942679 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

数据库字段复用的基本原理与示例

 
阅读更多

 一、逻辑代数基础:  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 数据库字段复用的基本原理与示例,需要的朋友可以参考下。

    最新Python3.5零基础+高级+完整项目(28周全)培训视频学习资料

    DjangoORM基本创建基本类型以及生成数据库结构 DjangoORM使用mysql注意 DjangoORM基本增删查该 基于ORM实现用户登录 基于ORM实现用户增加删除修改以及查看详细 Django字段类型介绍 DjangoORM字段参数介绍 DjangoORM...

    亮剑.NET深入体验与实战精要3

    6.2 文档结构与基本语法 251 6.3 XML操作 253 6.3.1 XmlDocument创建XML文档 253 6.3.2 XmlTextWriter创建XML文档 254 6.3.3 XmlDocument读取XML文档 256 6.3.4 XmlTextReader读取XML文档 257 6.3.5 在HTML中显示XML...

    亮剑.NET深入体验与实战精要2

    6.2 文档结构与基本语法 251 6.3 XML操作 253 6.3.1 XmlDocument创建XML文档 253 6.3.2 XmlTextWriter创建XML文档 254 6.3.3 XmlDocument读取XML文档 256 6.3.4 XmlTextReader读取XML文档 257 6.3.5 在HTML中显示XML...

    asp.net知识库

    与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) 数据对象与DataRow ASP.NET中大结果集的分页[翻译] .net 2.0 访问Oracle --与Sql Server的...

    Grails 中文参考手册

    2.3 Hello World示例 2.4 使用IDE 2.5 规约配置 2.6 运行Grails应用 2.7 测试Grails应用 2.8 部署Grails应用 2.9 所支持的Java EE容器 2.10 创建工件 2.11 生成Grails应用 3. 配置 3.1 基本配置 3.1.1 内置选项 ...

    Visual Basic 6编程技术大全 中译本扫描版带书签 2/2

    14.2.2数据库基本操作496 14.2.3开放式客户端批处理修改500 14.2.4使用Command对象504 14.2.5使用DataEnvironment设计器506 14.3高级技术510 14.3.1 Recordset事件510 14.3.2异步操作514 14.3.3保存过程516 14.3.4...

    Visual Basic 6编程技术大全 中译本扫描版带书签 1/2

    14.2.2数据库基本操作496 14.2.3开放式客户端批处理修改500 14.2.4使用Command对象504 14.2.5使用DataEnvironment设计器506 14.3高级技术510 14.3.1 Recordset事件510 14.3.2异步操作514 14.3.3保存过程516 14.3.4...

    vfp6.0系统免费下载

    与 Visual FoxPro 以前的版本不同,这些示例将与所有 Visual Studio 示例安装在一起。您必须运行 MSDN Library 的“自定义”安装来安装这些示例。在 Visual FoxPro 中可使用新的 HOME(2) 函数方便地找到已安装示例的...

    springmybatis

    3. 建立与数据库对应的 java class,以及映射文件. 在src_user下建立package:com.yihaomen.mybatis.model ,并在这个 package 下建立 User 类: 程序代码 程序代码 package com.yihaomen.mybatis.model; public class...

Global site tag (gtag.js) - Google Analytics