热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

sql查询一个字段多个值_MySQL表结构一个字段多个状态设计

MySQL表结构一个字段多个状态设计场景关于产品的状态字段:需求V1.0,产品,有是否上架、是否删除的状态。之前的做法是产品表结构中定义两

MySQL表结构一个字段多个状态设计

场景

关于产品的状态字段:

  • 需求V1.0,产品,有是否上架、是否删除的状态。之前的做法是产品表结构中定义两个字段:is_online、is_del,分别用1和0的值来判断是和否。
  • 需求V2.0,新增需求,产品要有是否置顶、是否热门的状态。因为之前的表结构设计,这时候,我们就要动表结构。缺点可自行百度,这里不做赘述。
  • 需求V3.0,新增是否推荐的状态。。。

面对市需求的变化,我们技术需要考虑,如何增强自身系统的可扩展性,减少成本、提高效率。回到技术本身,利用技术基础知识,优化表结构设计。

利用二进制来表示状态

百度百科:

二进制(binary)在数学和数字电路中指以2为基数的记数系统,以2为基数代表系统是二进位制的。

这一系统中,通常用两个不同的符号0(代表零)和1(代表一)来表示 [1] 。

数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。

每个数字称为一个比特(Bit,Binary digit的缩写) 。

字节

字节(Byte )是计算机信息技术用于计量存储容量的一种计量单位,作为一个单位来处理的一个二进制数字串,是构成信息的一个小单位。是二进制数据的单位,一个字节通常8位长。1Byte=8 Bit。

字节,对应的二进制:

0000 0000

使用二进制位来代表一个字段的多个状态,每个位置,代表一个状态,多个位置代表多个状态,存储的时候转换为int类型存储。

24916053815a58d16a78d3a9e805d2d1.png

二进制字段值

十进制的值,代表了二进制的位置,对应不同的状态。

多个状态的组合,二进制转为十进制:

474d014d0bd699affcfb98b34be5b426.png

二进制和十进制转换8421码

sql查询

1)是否包含:&与运算符,比如:(3&2)=2

2)组装:&与运算符,比如 6&3=3

字段扩展

c9a29b2176bf3c5654c0c0faaf79251f.png

二进制字段值

查询示例:

发布和正常的产品:

# 单独某个状态的条件查询SELECT * FROM product where state & 1=1 and state & 2=2

or

# 单独某个状态的条件查询,不写等于,默认等于当前与(&)的值SELECT * FROM product where state & 1 and state & 2

or

# 组合状态,必须写等于。否则无效SELECT * FROM product where state & 3=3

正常和不发布的产品:

# 组合状态,必须写等于。SELECT * FROM product where state & 1=1 and state & 2=0

程序里面的状态控制

程序里面的状态控制使用int类型(十进制),包括查询、更新等



推荐阅读
author-avatar
1911530988com
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有