按位与或运算在业务当中的应用

本文介绍位运算(位或运算符|和位与运算符&)的基本概念及在商场系统产品类目属性查询中的高效应用。通过将产品类目属性编码为2的幂次,使用位或运算实现多类目属性的合并,利用位与运算精确筛选出符合特定类目的产品,从而提高查询效率。

##1. 与或运算:
1、位或运算符 ( | ) :对应的二进制位有一个或两个为 1 ,则该位的运算结果为 1 ,否则为 0

mysql> SELECT 10 | 15 , 9 | 4 | 2 ;
+---------+-----------+
| 10 | 15 | 9 | 4 | 2 |     # 10的二进制为1010,15的二进制为1111,按位或运算之后结果为1111,即15
+---------+-----------+     # 9的二进制为1001,4的热禁止为0100,2的二进制为0010,按位或运算之后结果为1111,即15
| 15      | 15        |     
+---------+-----------+

 

2、位与运算符 ( & ) :对应的二进制位都为 1 ,则该位的运算结果为 1 ,否则为 0

mysql> SELECT 10 & 15 , 9 & 4 & 2 ;
+---------+-----------+
| 10 & 15 | 9 & 4 & 2 |
+---------+-----------+
| 10      | 0         |
+---------+-----------+

##2. 应用场景:
###2.1
商场系统中,有一个产品属性和产品类目属性,一个产品可能属于多个类目,在依据类目做查询时需要把属于该类目的所有产品查询出来,一般情况下我们的解决办法是,
把该产品所属的类目用分隔符按字符串形式保存到,比如
商场中白菜这个产品,白菜属于蔬菜类目1和抢购商品类目2,那么保存为(1,2),当查询所有抢购商品时,用like(‘,%2%’)等方式做查询,在数据量大的时候,这种查询效率太低,
此时可以考虑用与或运算。
###2.2
1. 产品类目用2的指数来表示:比如下图;
2. 如果一个商品属于多个类目,则用多个类目的值做或运算,比如 既是蔬菜又是限时抢购,则该产品的类目为16|1024=1040;
3. 当查询抢购商品时,用与运算,cat & #{cat},比如查询抢购商品时以下sql:
select * from product where cat & 1024
此sql的意思是:查询cat为cat$1024=1024的数据,所以1040&1024 =1024, 该条数据是可以被查询出来的;

###2.3 注意:

类型不易太多,如果类型太多容易出现重复数据,查询结果可能不够准确;

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值