作者gpmm (银色)
看板PHP
标题Re: [请益] 资料库规划问题 (MySQL)
时间Thu Mar 15 21:52:12 2012
1F:推 mrbigmouth:推全是精华 03/15 04:53
2F:推 mervynW:大推. 03/15 09:53
3F:推 liaosankai:推经验分享 03/15 10:26
4F:推 LaPass:推 03/15 10:28
5F:→ chrisQQ:bit 运算超好用! 03/15 14:08
6F:推 kusoayan:可以解释一下什麽是用 bit 运算吗@@? 03/15 16:05
7F:推 mervynW:我猜是早期mysql没有boolean, 所以用 bit(1) 来代替 03/15 16:31
8F:推 characterlu:受教了,还是声明一下,因为是新手,也许问的问题会让人 03/15 16:33
9F:→ characterlu:觉得不经思考或问错,这我愿意受教,但只是想不想回答是 03/15 16:34
10F:→ characterlu:用是否为作业去思考,那跟态度或内容恐怕就无关了 03/15 16:34
11F:→ mervynW:多个boolean也行 bit(3) ex rwx 03/15 16:35
12F:推 LaPass:我还以为是拿个int当一串bit那种位元运算的技巧 囧" 03/15 16:38
你的是对的 XDD
13F:推 mervynW:用 int 所占得空间比较大. bit 你知道的. 03/15 17:04
我是指位元运算,不是储存位元… orz 打得太快了
以 unsigned tinyint 来说,值范围是 0 ~ 255,
255 在二进位下是 11111111,换句话说也就是可以储存 8 个二元选项,
举个实际例子好了,
如果使用者有三个可以自行设定的项目:
是否收到 EDM、是否收简讯、是否收到优惠卷
资料表可以是三栏位式的设计
recive_edm enum yes,no
recive_sms enum yes,no
recive_coupon enum yes,no
也可以是一栏式的设计
recive_option unsigned tinyint 0 (000), 1(001), 2(010), 3(011) …
在一栏式的设计里,可以透过位元运算来处理,
php 里先定义一下:
define ('_RECIVE_EDM', 0x01);
define ('_RECIVE_SMS', 0x02);
define ('_RECIVE_COUPON', 0x04);
这样如果要从资料表中找出「愿意收到 EDM」
而且「愿意收到简讯」的使用者,
判段式可以像以下这样写
前略… WHERE `recive_option`&' . (_RECIVE_EDM | _RECIVE_SMS) .' …後略
如果某使用者设定自己「愿意收到简讯」、「愿意收到优惠倦卷」,
更新可以像下面这样写
前略… SET `recive_option`='. (_RECIVE_SMS | _RECIVE_COUPON) .' …後略
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.219.113.121
※ 编辑: gpmm 来自: 61.219.113.121 (03/15 21:52)
14F:推 LaPass:啊啊~ 果然是这个~ 不过我没在资料库中试过说 03/15 21:59
15F:推 Canboo:这篇的启蒙,我要花点时间好好玩一下这玩意了... 03/15 23:44
16F:推 kusoayan:谢谢!Y 03/16 00:51
17F:推 coldollsheep:挖!!!这篇赞赞赞 从来没这样玩过 03/18 21:04
18F:推 JYHuang:...原来可以这样搞,我之前还想破头用log来换算2进位 XD 03/21 16:27
19F:推 myans:bit运算 正点...受教了 03/26 17:56