- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下场景:
一个有很多复选框的表单,大约 100 个。
关于如何将它们保存在数据库中,我有两个想法:
我创建了一个如下所示的表:
id | box1 | box2 | ... | box100 | updated| created
id: int
box1: bit(1)
SELECT * FROM table WHERE box1 = 1 AND box22 = 1 ...
表格很简单:
id | data | updated | created
data: varchar(100)
SELECT * FROM table WHERE data LIKE '_______1___ ... ____1____1'
其中数据看起来像 0001100101010......01
每个字符表示是否检查了值。
考虑到表将有 200k+ 行,这是一个更具可扩展性的解决方案?
我还没有这方面的好消息。
最佳答案
或者...
<强>4。几个SETs
<强>5。几个INTs
SET
或 INT
.我建议根据应用程序以某种合乎逻辑的方式对位进行分组。FIND_IN_SET()
.(1 << $n)
创造值(value)2^n
.|
和 &
运营商。5 个中哪个最好?这取决于您需要运行的查询——搜索(如果需要?)、插入、更新(如果需要?)和选择。
一个例子:INTs
, WHERE (bits & 0x2C08) = 0x2C08
将同时检查 4 个标志是否为“ON”。该常量可以在应用程序代码中构造,或者 ((1<<13) | (1<<11) | (1<<10) | (1<<3))
对于位 3、10、11、13。同时,其他标志被忽略。如果您需要将它们设为“OFF”,则测试为 WHERE bits ^ 0x2C08 = 0
.如果这两种测试中的任何一种是您的主要事件,那么选择 5 可能是性能和空间方面的最佳选择,尽管它读起来有些神秘。
添加另一个选项时,SET
需要 ALTER TABLE
. INT
通常 有一些备用位(TINYINT UNSIGNED
有 8 位,... BIGINT UNSIGNED
有 64 位)。所以,大约八分之一的时间,你需要一个 ALTER
获得更大的 INT 或添加另一个 INT。删除一个选项:建议只放弃那个 SET 元素或 INT 的一点。
关于mysql - 许多复选框有很多列还是单列位串更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50449744/
我是一名优秀的程序员,十分优秀!