使用位运算解决多选查询问题,杜绝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%  如果三呢...

 

原创不易,如果您觉得对您有所帮助,而且您资金宽裕,可以请作者喝杯咖啡,谢谢  嘿嘿

使用位运算解决多选查询问题,杜绝like查询_第1张图片

转载请标明出处,谢谢

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

你可能感兴趣的:(位运算)