位运算解决多标签问题【原创】
程序员文章站
2022-05-29 12:34:17
日常开发中经常用到一个酒店下有多个标签比如酒店的风格特点有: `场地方正 豪华 美食 自然采光 园林草坪 温泉 景区周边 水景 泳池 中式院落 西式装修 少数民族 会场进车 高尔夫` 我们一般都会对其进行编号: 存放在数据库时主要是存放该值的key值,如果一个酒店只有一个标签是没什么问题的,但是如果 ......
日常开发中经常用到一个酒店下有多个标签比如酒店的风格特点有:无柱
场地方正
豪华
美食
自然采光
园林草坪
温泉
景区周边
水景
泳池
中式院落
西式装修
少数民族
会场进车
高尔夫
我们一般都会对其进行编号:
{ '1': 无柱, '2': 场地方正, '3': 豪华, '4': 美食, '5': 自然采光, '6': 园林草坪, '7': 温泉, '8': 景区周边, '9': 水景, '10': 泳池, '11': 中式院落, '12': 西式装修, '13': 少数民族, '14': 会场进车, '15': 高尔夫 }
存放在数据库时主要是存放该值的key值,如果一个酒店只有一个标签是没什么问题的,但是如果一个酒店有多个标签,并且又需要支持单个标签也可以筛选出该酒店就需要用到位运算,那具体这个位运算怎么设计呢?需要我们一起看看。
我们假设某个酒店存在 无柱
美食
泳池
三个标签
这样我们可以设计一个长度为15的二进制数,满足条件的位为1,不满足的为0,那该酒店的二进制数为 000001000001001
转换为十进制为 521
这样我们存放到数据库里面的数值为 521
那这样怎么获取该酒店是否有该标签呢?
我们可以采用位运算的与(&)运算:两个位都为1时,结果才为1
那如果我们要判断无柱
这个标签是否存在该酒店
首先获取代表无柱
的二进制数000000000000001
,
然后转换成10进制为1,
最后我们可以通过 tags & 1
来判断该酒店是否有无柱
这个标签。
数据库查询语句为:
select * from hotel_info where (tags & 1); select * from hotel_info where (tags & 4); select * from hotel_info where (tags & 10);
好了,今天的分享就到这里,明天见
推荐阅读
-
位运算解决多标签问题【原创】
-
解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载) 原创
-
LeetCode 由子集问题联想到的关于解决排列组合问题的位运算方法
-
教你巧用mysql位运算解决多选值存储的问题
-
位运算解决多标签问题【原创】
-
解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载) 原创,wincachephp5.5
-
解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载) 原创
-
解决wincache不支持64位PHP5.5/5.6的问题(提供64位wincache下载) 原创,wincachephp5.5_PHP教程
-
【位运算,异或】“只出现一次的数字” 的一类问题解决方法
-
教你巧用mysql位运算解决多选值存储的问题