我创建了一个包含大量复选框的表单,我想知道如何将它放在我的MySql数据库中。
以下是表单的示例:
标签:金额
复选框:小|很多|没那么多|等等。
标签:篮子类型
复选框:木制篮子|钢篮|等。|等
标签:水果
复选框:香蕉|苹果|橘子|等。|等
在上面的示例中,您可以选择多个金额,例如我想要一个只有少量或多个水果的篮子。您只能选择一种篮子类型,您可以选择一种或多种水果。
所有这些单独的项目都从数据库加载,并且ID被添加到复选框。
现在提交表单时我现在存储的方式是: 表:FruitBasket 记录1: Fruitbasket Id = 1 水果Id = 1 篮子类型= 1 金额Id = 1 记录2: Fruitbasket Id = 1 水果Id = 1 篮子类型= 1 金额Id = 3
所以提交此表单一次,让我们说选中10个复选框会生成很多记录。很多用户都会创建这些用户,并且可以选择比较这些FruitBaskets。
所以我的问题是,我当前存储数据的方式是否正确,因为它看起来效率非常低并且会生成如此多的记录。还有另一种方法可以将所有这些数据存储为一个水果篮吗?
答案 0 :(得分:0)
我建议使用比特场来存放每个水果篮。您可以使用按位运算符等直接比较水果篮。如果您使用Javascript将用户限制为真正可用的选项,那么它应该可以正常工作。
示例:
// Quantities
LITTLE = 1 (0x0000000000000001)
MANY = 2 (0x0000000000000010)
NOT_SO_MANY = 4 (0x0000000000000100)
ALL_QTYS = 7 (0x0000000000000111)
// Basket type
WOODEN = 8 (0x0000000000001000)
STEEL = 16 (0x0000000000010000)
ALL_BASKETS = 24 (0x0000000000011000)
// Fruit types
BANANAS = 32 (0x0000000000100000)
APPLES = 64 (0x0000000001000000)
ALL_FRUIT = 96 (0x0000000001100000)
user_selection = LITTLE | STEEL | BANANAS | APPLES; (0x0000000001110001)
other_user_selection = LITTLE | WOODEN | BANANAS | APPLES; (0x0000000001101001)
// use the bitwise AND to compare only the fruit types...
if((user_selection & ALL_FRUIT) == (other_user_selection & ALL_FRUIT))
echo "Fruit selection is the same!";