百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 介绍Mysql位运算简化一对多关系
分享文章到:

介绍Mysql位运算简化一对多关系

发布时间:01/01 来源:未知 浏览: 关键词:
mysql教程栏目介绍位运算简化一对多关系

引荐(免费):mysql教程

语法

& : 按位与,二进制位同时都为1的位设为1。
| : 按位或,二进制位有一个位为1就为1.
^ : 按位异或,对应位的二进制数不一样时,对应位的结果才为1;假如两个对应位数都为0或者都为1,则对应位的结果为0。

道理

$a = 6 转化为2进制为 110
$b = 3 转化为2进制为 11
$a & $b便是 110 与 11
将$a和$b中都为1的位设为1,位数不足的补0.即110 与 011
运算结果010,转化为十进制结果为2

利用场景

每个景点包括许多属性,例如适合旅行的月份,我们一样的做法大概有两种:

  1. 是增添一个varchar字段,每个月份之间用一个非凡符号分隔留存,例如:"1,2,22,65,7"
  2. 创立一个关系表,在这里不克不及使用1-12的数字来表示月份,而是使用1,2,4,8,16,32,64,128,512,1024,2048,4096来表示,假如是多个月份,可以彼此组合相加,之后储备为一个值。
    比方 1,10,12月份,就可以储备1+512+4096=4609,4096 这个值。

这个技巧适用于属性较少的一对多的场景,可以储备1个或者多个,太多的话还是引荐试用关系表。常用的属性有:月份,新闻提示类型,各种有限的类型组合等等。

使用技巧:

-- 增加一个分类 用 “|”
SELECT (4|2|1); --- = 7

-- 去除一个分类,用“^”
SELECT 7 ^ 1;

-- 当我们需要查询某个月份的景点时,例如查询3月份的景点,可使用以下语句:
SELECT * FROM `spots` WHERE `month` & 4 = 4;

-- 当设定某个景点适合某个月份时,例如设定4325的景点适合2月份,可使用下面的语句:
    
UPDATE `spots` SET `month` = `month` | 2 WHERE `id` = 4325

-- 当取消设定某个景点的月份时,可使用下面的语句:
UPDATE `spots` SET` month` = `month` ^ 2 WHERE`id`= 4325

-- 查询同时适合多个月份的数据,例如需要查询设定了11,12,1月份的景点,将其三个月份对应的数值加起来,结果为6145,然后使用这个数值停止查询:

SELECT * FROM `spots` WHERE `month` & 6145 = 6145

-- 查询只要适合,1,11,12月份其中一个月份的景点就行
SELECT * FROM `spots` WHERE (`month` & 4096 = 4096) or (`month` & 2048 = 2048) or (`month` & 1 = 1)

以上就是介绍Mysql位运算简化一对多关系的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有150人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板