码迷,mamicode.com
首页 > 其他好文 > 详细

位运算解决多标签问题

时间:2019-05-19 22:07:22      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:装修   数值   class   今天   select   假设   pre   数据库   开发   

日常开发中经常用到一个酒店下有多个标签比如酒店的风格特点有:无柱?场地方正?豪华?美食?自然采光?园林草坪?温泉?景区周边?水景?泳池?中式院落?西式装修?少数民族 会场进车?高尔夫

我们一般都会对其进行编号:

{
    '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);

好了,今天的分享就到这里,明天见

位运算解决多标签问题

标签:装修   数值   class   今天   select   假设   pre   数据库   开发   

原文地址:https://www.cnblogs.com/jingh/p/10890969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!