我有一个表单,用户可以提交网站,并说如果他们在不同的浏览器工作。目前,它看起来是这样的:
<input type=checkbox name="browsers[]" value="IE6"/>Internet Explorer 6<br/>
<input type=checkbox name="browsers[]" value="IE7"/>Internet Explorer 7<br/>
<input type=checkbox name="browsers[]" value="IE8" checked="checked"/>Internet Explorer 8<br/> <br/>
<input type=checkbox name="browsers[]" value="FF2" checked="checked"/>Firefox 2<br/>
<input type=checkbox name="browsers[]" value="FF3" checked="checked"/>Firefox 3<br/> <br/>
<input type=checkbox name="browsers[]" value="SA3" checked="checked"/>Safari 3<br/>
<input type=checkbox name="browsers[]" value="SA4" checked="checked"/>Safari 4<br/> <br/>
<input type=checkbox name="browsers[]" value="CHR" checked="checked"/>Chrome<br/> <br/>
<input type=checkbox name="browsers[]" value="OPE" checked="checked"/>Opera<br/> <br/>
<input type=checkbox name="browsers[]" value="OTH" />Other Browsers<br/> <br/>我想知道的是,在数据库中存储复选框值的最有效方法是什么?当用户在我的网站上浏览该网站的页面时,我希望它查询数据库并返回与其兼容的网站。目前,我正在考虑这样做:
<?php if (!$browsers['FF2'] = NULL) {
//(Insert into field named 'FF2')
} else {
//(Keep field named 'FF2' as NULL)
} ?>然后,当访问站点的页面时,它只会检查每个数据库列(FF2、FF3、SA4等)。查看该值是否不为NULL。如果不是,它将回显‘兼容FF2’等。
这让我觉得有点不合逻辑。每个浏览器都有一个单独的专栏似乎有点可笑--我不知道这是我的怀疑,还是这真的是最简单的方式。有没有人能推荐一些其他的方法?
谢谢!
杰克
发布于 2010-02-25 15:55:14
为了提供灵活性,我会使用many-to-many关系。
因此,例如,有一个包含browserId和websiteId foreign keys的支持表,这意味着对应于websiteId的网站支持对应于browserId的浏览器。然后显然有浏览器和网站表,其中包含ids和其他所需信息。
发布于 2010-02-25 15:56:50
你问了很多问题,所以我来回答这个问题:
“我想知道的是,在数据库中存储复选框值的最有效方法是什么?”
你可以使用MySQL的布尔值...但是,您可以通过将所有数据存储在一个变量位移位和一个长整数中来进行优化?由于MySQL的布尔值实际上是一个8位的短整型...如果你有10个真/假值,如果你使用MySQL的布尔值,那就需要80位,而实际上,你只需要10位。
第一位:在ie7中工作
第二位:在ie8中工作
...etc
发布于 2010-02-25 15:58:34
这取决于你认为你的选择必须改变的频率。
一般来说,拥有许多相似的字段非常简单,但存储数据的方式太灵活了。另一种选择是为可能的值创建一个表(每个值一条记录),并使用链接表将它们链接到用户记录。然而,这是更灵活、更复杂的解决方案,并且会给数据库服务器带来更多的负载。
在谷歌上搜索'One True Lookup Table‘可以获得这方面的提示。
https://stackoverflow.com/questions/2332447
复制相似问题