作者starjou (周星星)
看板Database
标题Re: [SQL ] 请问这个查询的语法该怎麽下?(Sql Server)
时间Sat May 3 13:46:56 2008
※ 引述《starjou (周星星)》之铭言:
: 如果能更动栏位结构的话,我会用一个无号整数栏位来当各种 language 的 flag
: 如果用 8 位元的整数就能记载 8 种语言的状况,big int 可以记 64 种,要是还不够,
: 再加栏位。然後一个人只要有一笔资料。之後用位元运算来维护这个栏位,
: 这样 select 也比较容易。
:
: 只是要另位做一份参照文件,第一个 bit 是什麽语言,第二个 bit 是什麽语言,
: 给维护程式的人看。
:
: --
:
※ 发信站: 批踢踢实业坊(ptt.cc)
: ◆ From: 219.80.138.232
: 推 artingo:这方法不错,这样要查精通多种语言的人就不用很多巢状结构 05/03 09:25
: 推 JoeHorn:可惜 SQL 里面的运算子不多,这样作会多操 DB data I/O 。 05/03 11:02
不知道所谓运算子不多的意思是什麽? MySQL 里位元运算是有的。
ex: 一个 byte 00000000 分别代表 中英法德日义韩西 好了,栏位名称 lang_flag
会中文的 WHERE lang_flag & 128 <> 0
不会中文的 WHERE lang_flag & 128 = 0
多个语言就多个条件 AND 串连 (也可以先自己加起来,不过比较容易搞错)
要维护某个 tag, 例如设成会中文 SET lang_flag = lang_flag | 128
设成不会中文 SET lang_flag = lang_flag & ~128
多个言语的话,可以多次指定,也可以在从 form 的八个 checkbox 去加总,
直接设定,就不用用到 bit 运算。
以 PHP 为例,form 元素如下:
<input type="checkbox" name="lang[]" value = 1>西班牙文
<input type="checkbox" name="lang[]" value = 2>韩文
<input type="checkbox" name="lang[]" value = 4>义大利文
........
server 接受时未勾选的元素值并不会传回,用 foreach 将 lang 阵列加总
即为要填入 lang_flag 的值。
想请教上述会有 IO 负荷的问题吗?对这方面不是很了解 ...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 219.80.138.232
※ 编辑: starjou 来自: 219.80.138.232 (05/03 13:49)
1F:推 JoeHorn:没错,您提的这个解法是非常漂亮的解法。 05/03 14:48
2F:推 JoeHorn:我在原本推文时没想到,不好意思。 PS. 可用 array_sum() 05/03 14:52
3F:→ starjou:了解了,谢谢 :) 05/03 18:06