语法

& : 按位与,二进制位同时都为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 位运算 一对多_介绍Mysql位运算简化一对多关系相关推荐

  1. mysql 日期和时间函数_介绍一下mysql的日期和时间函数

    介绍一下mysql的日期和时间函数 mysql> SELECT PERIOD_DIFF(9802,199703); -> 11 DATE_ADD(date,INTERVAL expr ty ...

  2. ITERATE MYSQL 例子_介绍MySQL的Iterate迭代语句实例代码

    在学习MySQL的时候,我们需要知道些什么,要注意哪些问题,下面我们来介绍 MySQL 的 Iterate 迭代语句.mysql> mysql> mysql> DELIMITER / ...

  3. ITERATE MYSQL 例子_介绍 MySQL 的 Iterate 迭代语句实例代码

    在学习MySQL的时候,我们需要知道些什么,要注意哪些问题,下面我们来介绍 MySQL 的 Iterate 迭代语句.mysql> mysql> mysql> DELIMITER / ...

  4. mysql8集群的优点_介绍 MySQL 8 中值得关注的新特性和改进。

    窗口函数(Window Functions):从 MySQL 8.0 开始,新增了一个叫窗口函数的概念,它可以用来实现若干新的查询方式.窗口函数与 SUM().COUNT() 这种集合函数类似,但它不 ...

  5. MySQL数据库test连接语句_【MySQL数据库开发之二】MySQL 基础语句的书写与操作!...

    本篇Himi简单介绍一些MySQL数据库的基础操作: 注:mysql 语句对大小写不敏感,语句以分号";"标识语句结束: 1.   首先使用两个简单的查询语句: 查询当前版本:se ...

  6. mysql 自动化运维工具_部署MySQL自动化运维工具inception+archer

    *************************************************************************** 部署MySQL自动化运维工具inception+ ...

  7. mysql中时间处理函数_基于mysql时间处理函数的应用详解

    DAYOFWEEK(date) 返回日期date的星期索引(1=星期天,2=星期一, --7=星期六).这些索引值对应于ODBC标准. mysql> select DAYOFWEEK('1998 ...

  8. mysql中下列关于创建_在 MySQL 中,下列关于创建数据库表的描述正确的是( )。_学小易找答案...

    [单选题]在表中设置外键实现的是哪一类数据完整性( ) [单选题]以下为概念模型的是() [论述题]• 参照 < 中国图书馆分类法 > ,谈一下你对自己所学专业在整个科学知识领域中所在的位 ...

  9. db2 mysql sql server_下文给大家介绍mysql数据库介绍,具体详情如下所示:MySQL数据库:Oracle、DB2、SQL Server、MySQL、access、mang...

    下文给大家介绍mysql数据库介绍,具体详情如下所示: MySQL 数据库: Oracle.DB2.SQL Server.MySQL.access.mangodb.bigtable 关系型数据库 大型 ...

最新文章

  1. 你正在用的API网关,真的起到了它该有的作用?
  2. floyd算法_最短路径的算法:Floyd算法
  3. C#_数据库基本交互
  4. 公需科目必须学吗_税务师要继续教育吗,2019税务师怎样继续教育?
  5. 前端绘制绘制图表_绘制图表(第2页):JavaScript图表库的比较
  6. Windows 7硬盘安装方法大全
  7. 那些年我们追过的计算机经典书
  8. angularJS1.6.3个人理解(后续更新4.4.7)
  9. 挖矿仍然有利可图吗?
  10. Leetcode 385.字典序排序
  11. HAL层三类函数及其作用
  12. oel安装中文环境,Linux UTC,CST时间及修改时间
  13. 【锋利的jQuery】读书笔记
  14. windows server 2003 网络操作系统项目教程 特制版
  15. linux命令 dmesg_如何在Linux上使用dmesg命令
  16. 如何安全上网-浏览器隐私防护
  17. 如何让文本框中文字居中
  18. php农历生日计算,阴历-农历-转换类 (PHP版),阴历php
  19. node环境的CPU密集型与IO密集型介绍
  20. PS怎么抠出圆形图(可调整边缘)

热门文章

  1. 《人性的弱点》--如欲采蜜,勿蹴蜂房。
  2. java基础数据类型包装类
  3. HDP Hive StorageHandler 下推优化的坑
  4. NYOJ 364 田忌赛马
  5. 080 HBase的属性
  6. 修车-最小费用最大流
  7. THotKey控件 delphi
  8. 设计模式--适配器1模式实现C++
  9. 机器学习-数据科学库-day1
  10. python globle用法