Mysql位运算简化一对多关系的示例分析

41次阅读
没有评论

共计 1270 个字符,预计需要花费 4 分钟才能阅读完成。

自动写代码机器人,免费开通

这篇文章主要介绍 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 

应用场景

每个景点包含很多属性,例如适合旅游的月份,我们一般的做法可能有两种:

是增加一个 varchar 字段,每个月份之间用一个特殊符号分隔保存,例如: 1,2,22,65,7

建立一个关系表, 在这里不能使用 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 位运算简化一对多关系的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注丸趣 TV 行业资讯频道!

向 AI 问一下细节

丸趣 TV 网 – 提供最优质的资源集合!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-18发表,共计1270字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)