首页 数据库 mysql教程 数据库字段复用的基本原理与示例_MySQL

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

Jun 01, 2016 pm 01:50 PM
二进制

bitsCN.com

  一、逻辑代数基础:

  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}";

  依此类推,只要定义好每个值的含义,查询基本上就定了。

bitsCN.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1318
25
PHP教程
1269
29
C# 教程
1248
24
EDVAC有哪两个重大的改进 EDVAC有哪两个重大的改进 Mar 02, 2023 pm 02:58 PM

EDVAC的两个重大的改进:一是采用二进制,二是完成了存贮程序,可以自动地从一个程序指令进到下一个程序指令,其作业可以通过指令自动完成。“指令”包括数据和程序,把它们用码的形式输入到机器的记忆装置中,即用记忆数据的同一记忆装置存贮执行运算的命令,这就是所谓存贮程序的新概念。

二进制算法怎么算 二进制算法怎么算 Jan 19, 2024 pm 04:38 PM

二进制算法是一种基于二进制数的运算方法,其基本运算包括加法、减法、乘法和除法。除了基本运算外,二进制算法还包括逻辑运算、位移运算等操作。逻辑运算包括与、或、非等操作,位移运算包括左移和右移操作。这些操作都有对应的规则和操作数的要求。

如何使用C语言将二进制转换为十六进制? 如何使用C语言将二进制转换为十六进制? Sep 01, 2023 pm 06:57 PM

二进制数以1和0表示。16位的十六进制数系统为{0,1,2,3…..9,A(10),B(11),……F(15)}为了从二进制表示转换为十六进制表示,位串id被分组为4位块,从最低有效侧开始称为半字节。每个块都替换为相应的十六进制数字。让我们看一个示例,以清楚地了解十六进制和二进制数字表示。001111100101101100011101 3  E  5  B&nb

Golang如何读取二进制文件? Golang如何读取二进制文件? Mar 21, 2024 am 08:27 AM

Golang如何读取二进制文件?二进制文件是以二进制形式存储的文件,其中包含了计算机能够识别和处理的数据。在Golang中,我们可以使用一些方法来读取二进制文件,并将其解析成我们想要的数据格式。下面将介绍如何在Golang中读取二进制文件,并给出具体的代码示例。首先,我们需要使用os包中的Open函数打开一个二进制文件,这将返回一个文件对象。然后,我们可以使

负数的二进制怎么表示 负数的二进制怎么表示 Nov 23, 2023 pm 04:11 PM

负数在计算机中采用补码表示,即用正数的二进制补数来表示负数。

轻松学会Go语言中16进制转二进制 轻松学会Go语言中16进制转二进制 Mar 15, 2024 pm 04:45 PM

题目:轻松学会Go语言中16进制转二进制,需要具体代码示例在计算机编程中,经常会涉及到对不同进制数之间的转换操作。其中,16进制和二进制之间的转换是比较常见的。在Go语言中,我们可以通过一些简单的代码示例来实现16进制到二进制的转换,让我们一起来学习一下。首先,我们来了解一下16进制和二进制的表示方法。16进制是一种表示数字的方法,使用0-9和A-F来表示1

计算机内部采用二进制的主要原因是什么? 计算机内部采用二进制的主要原因是什么? Apr 04, 2019 pm 02:25 PM

计算机采用二进制的主要原因:1、计算机是由逻辑电路组成,逻辑电路通常只有两个状态,开关的接通与断开,这两种状态正好可以用“1”和“0”表示;2、二进制中只使用0和1两个数字,传输和处理时不易出错,因而可以保障计算机具有很高的可靠性。

计算机中采用二进制的主要原因是什么 计算机中采用二进制的主要原因是什么 Dec 03, 2020 pm 05:01 PM

计算机中采用二进制的主要原因是:1、可进行逻辑运算;2、运算法则简单;3、两个状态的系统容易实现成本。在数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。

See all articles