MySql为一个简单的复选框表单添加了太多记录?

时间:2013-02-15 16:24:48

标签: mysql sql checkbox many-to-many

我创建了一个包含大量复选框的表单,我想知道如何将它放在我的MySql数据库中。

以下是表单的示例:


标签:金额

复选框:小|很多|没那么多|等等。


标签:篮子类型

复选框:木制篮子|钢篮|等。|等


标签:水果

复选框:香蕉|苹果|橘子|等。|等


在上面的示例中,您可以选择多个金额,例如我想要一个只有少量或多个水果的篮子。您只能选择一种篮子类型,您可以选择一种或多种水果。

所有这些单独的项目都从数据库加载,并且ID被添加到复选框。

现在提交表单时我现在存储的方式是: 表:FruitBasket 记录1: Fruitbasket Id = 1 水果Id = 1 篮子类型= 1 金额Id = 1 记录2: Fruitbasket Id = 1 水果Id = 1 篮子类型= 1 金额Id = 3

所以提交此表单一次,让我们说选中10个复选框会生成很多记录。很多用户都会创建这些用户,并且可以选择比较这些FruitBaskets。

所以我的问题是,我当前存储数据的方式是否正确,因为它看起来效率非常低并且会生成如此多的记录。还有另一种方法可以将所有这些数据存储为一个水果篮吗?

1 个答案:

答案 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!";