`
锅巴49
  • 浏览: 161143 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据库中用二进制数值存储及查询标识值

 
阅读更多

我要存储会员信息

 

业务是多变的,需要存储多种标识。

 

如:

 

要标识会员是否是卖家,

要标识会员手机是否已认证

要标识会员是网站还是手机注册

 

。。。。

 

这些标识是互相独立,需要支持联合查询

 

 

一般的做法是针对每个标识做个字段

 

tinyint  is_sell comment '1:卖家,0:买家'

tinyint  mobile_auth comment '1:已认证,0:未认证'

tinyint regist_from comment '1:网站,2:手机'

 

 

要查 是卖家,手机已认证的

 

is_sell = 1 and mobile_auth = 1

 

 

问题

 

标识是随时可能增加的,这意味着字段也要增加,这显然是非常困难的。

 

 

解决办法

 

1.标识以2的次方设置,标识值相加以10进制存储在字段中

 

 

如:卖家标识是 2的0次方,1

      手机认证是 2的1次方,2

      来自手机注册  2的2次方 4

 

某会员是卖家,来自手机注册,1+4 = 5

存储在数据库标识字段值是:5

 

 

2.要查有卖家标识的会员

 

  (5 & 1) == 1   ------> true

 

二进制与运算,返回值是该标识表明成立

 

101

001

-----

001

 

3.要查有卖家标识且手机认证的会员

 

  (5 & (1+2))  ==  (1+2)    ----> false

 

 

二进制与运算,返回值是几个标识的和表明成立

 

 

101

011

------

001

 

 

4.要查有卖家标识且或手机认证的会员

 

 

(5  &  (2+4)) > 0  -------->  true

 

 

二进制与运算,返回值大于零表明或关系成立

 

 

101

110

------

100

 

 

 

注意:

 

1. 在mysql中以long字段存储,可以存储2的64方的值,即最多可存储标识64个

 

 

 

 

分享到:
评论
1 楼 bingyingao 2012-09-04  
很有用,标记一下

相关推荐

Global site tag (gtag.js) - Google Analytics