当前位置:Gxlcms > 数据库问题 > mysql位运算的应用

mysql位运算的应用

时间:2021-07-01 10:21:17 帮助过:3人阅读

id int(主键)
name varchar(景点名)
province int(省份)
city int(城市)
month int(适合旅行月份)

其建表语句为:

CREATE TABLE `spots` (

  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ‘景点ID‘,
  `name` varchar(50) NOT NULL COMMENT ‘景点名称‘,
  `province` int(5) unsigned NOT NULL COMMENT ‘景点所在省份‘,
  `city` int(10) unsigned NOT NULL COMMENT ‘景点所属城市‘,
  `month` int(10) unsigned NOT NULL DEFAULT ‘0‘ COMMENT ‘适合旅行的月份‘,
  PRIMARY KEY (`id`),
  UNIQUE KEY `name` (`name`),
  KEY `location` (`province`,`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=‘景点信息表‘

 

注意:在这里不能使用1-12的数字来表示月份,而是使用1,2,4,8,16,32,64,128,512,1024,2048,4096来表示。

以下为使用技巧:
1. 当我们需要查询某个月份的景点时,例如查询3月份的景点,可使用以下语句:

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

2. 当设置某个景点适合某个月份时,例如设置4325的景点适合2月份,可使用下面的语句:

UPDATE `spots` SET `month` = `month` | 2 WHERE `id` = 4325

3. 当取消设置某个景点的月份时,可使用下面的语句:

UPDATE `spots` SET `month` = `month` ^ 2 WHERE `id` = 4325

4. 查询同时适合多个月份的数据,例如需要查询设置了11,12,1月份的景点,将其三个月份对应的数值加起来,结果为6146,然后使用这个数值进行查询:

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


应用自:http://blog.sae.sina.com.cn/archives/3506

mysql位运算的应用

标签:

人气教程排行