使用位运算解决多选查询问题,杜绝like查询

篮球、羽毛球、兵乓球、足球、滑板、滑旱冰、跑步、跳绳  有这八个兴趣存在字典表里,字典code是1~8
用户A喜欢:1、5、7、8
用户B喜欢:1、3、5
用户C喜欢:2、4、6
用户D喜欢:2、5、6、8
用户E喜欢:3、5、8

要求:
查询喜欢  7  的所有用户
查询喜欢1和5的所有用户

按照位运算要求数据库存储字段值为:code的平方根相加的和

1:2
2:4
3:8
4:16
5:32
6:64
7:128
8:256

用户A:1、5、7、8    = 418
用户B:1、3、5    = 42
用户C:2、4、6    = 84    
用户D:2、5、6、8    = 356    
用户E:3、5、8    = 296

select 418&pow(2,1)=pow(2,1)        true
select 418&pow(2,2)=pow(2,2)        false
select 418&pow(2,3)=pow(2,3)        false
select 418&pow(2,4)=pow(2,4)        false
select 418&pow(2,5)=pow(2,5)        true
select 418&pow(2,6)=pow(2,6)        false
select 418&pow(2,7)=pow(2,7)        true
select 418&pow(2,8)=pow(2,8)        true

pow()  最好别要数据库去算,由后台代码去算好

比用like %7%   %1%5% 要强百倍,而且也可能存储顺序不一定是有序的 还得 %5%1%  如果三呢...

 

转载请标明出处,谢谢

https://blog.csdn.net/likeYou1207/article/details/104541788

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值