0

多くのチェックボックスを含むフォームを作成しましたが、これをMySqlデータベースに配置する方法を考えています。

フォームの例を次に示します。


ラベル:金額

チェックボックス:少し| 多く| それほど多くない| などなど。


ラベル:バスケットタイプ

チェックボックス:木製バスケット| スチールバスケット| など| 等


ラベル:果物

チェックボックス:バナナ| りんご| オレンジ| など| 等


上記の例では、複数の量を選ぶことができます。たとえば、果物がほとんどまたは多くないバスケットが必要です。選択できるバスケットの種類は1つだけで、1つまたは複数の種類の果物を選択できます。

これらの個別のアイテムはすべてデータベースからロードされ、チェックボックスにIDが追加されます。

今すぐフォームを送信するときにそれらを保存する方法は次のとおりです。表:FruitBasketレコード1:Fruitbasket Id=1フルーツId=1バスケットタイプ=1金額Id=1レコード2:Fruitbasket Id=1フルーツID=1バスケットタイプ=1金額ID=3

したがって、このフォームを1回送信して、たとえば10個のチェックボックスを選択すると、多くのレコードが生成されます。多くのユーザーがこれらを作成し、これらのFruitBasketsを比較するオプションがあります。

ですから、私の質問は、データを正しく保存する現在の方法です。これは、非常に非効率的で、非常に多くのレコードを生成するためです。このすべてのデータを1つのフルーツバスケットとして保存する別の方法はありますか?

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 に答える