0

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

下面是一个表格示例:


标签:金额

复选框:很少 | 许多 | 没那么多| 等等等等


标签:篮式

复选框:木篮 | 钢篮 | 等| 等等


标签: 水果

复选框:香蕉 | 苹果 | 橘子| 高分辨率照片| CLIPARTO 等| 等等


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

所有这些单独的项目都从数据库中加载,并在复选框中添加了一个 id。

现在提交表单时我现在存储它们的方式是:表:FruitBasket Record 1:Fruitbasket Id = 1 Fruit Id = 1 Basket Type = 1 Amount Id = 1 Record 2:Fruitbasket Id = 1 Fruit Id = 1 Basket Type = 1金额 ID = 3

因此,如果选中 10 个复选框,则提交此表单一次将生成大量记录。很多用户将创建这些,并且可以选择比较这些 FruitBasket。

所以我的问题是,我目前存储数据的方式是否正确,因为它似乎真的效率低下并且生成了这么多记录。有没有另一种方法将所有这些数据存储为一个水果篮?

4

1 回答 1

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!";
于 2013-02-15T16:57:16.667 回答