2016-08-25 14 views
0

我々はストアとカスタムフィールドにチェックボックスの値を検索

以下のような私達のデータベース設計のカスタムフィールドを持つCustom_Field

field_id bigint(20) 
field_name varchar(200)  
field_label varchar(200)  
field_type varchar(45) 

Custom_Field_Value

field_id bigint(20) 
date_value datetime 
number_value decimal(18,6) 
string_value varchar(200) 
text_value text 

ここでは、のような単一の値を格納できることができますテキストボックス、ドロップダウン、ラジオボタン、およびテキストエリア。また、私は簡単に検索クエリでそれらを使用することができます。今私は、複数の値を含むチェックボックスの値を格納したいと思い、それらをagaistを検索したい。私はコンマ区切りの値でそれを格納することを計画していました。これ以上保存する方法はありますか?

答えて

1

いいえ1つのカンマ区切りのフィールドには格納しないでください。ソートや値の簡単な使用はできません。 次のような構造を使用してください。

まず、この種のものについて3-4のテーブルがあまりにも多すぎることがわかりますが、これで多くの利点があります。このようにして、オプションを非常に簡単に並べ替えたり、値を変更したり、特定のオプションをアクティブ化、非アクティブ化、または削除したり、多少の簡単な変更で多くの言語をサポートすることもできます。

また、2つの異なるタイプのテーブルを使用して、記憶容量を最適化することができます.1つはチェックボックスのみ、もう1つは整数値、もう1つは混合値(checkbox_option_intとcheckbox_option_text)です。

このようにして、checkbox_idをquestion_idに追加して、データベース内の冗長データなしですべての可能なオプションを選択するのは非常に簡単です。

checkbox_type

id type 
1 int 
2 text 

チェックボックス

id checkbox_type_id 
1 1 
2 1 
3 2 

checkbox_option_int

id checkbox_id value label rank active 
1 1   1  A  1  yes 
2 1   2  B  2  yes 
3 1   5  C  4  no 
4 1   8  D  3  yes 
5 2   1  AA  1  yes 
6 2   2  BB  2  yes 

checkbox_option_text

id checkbox_id value  label  rank active 
1 3   yes   Yes   1  yes 
2 3   no   No   2  yes 
3 3   perhaps  Perhaps  3  no 

EDIT:

次のような答えを保存することができます:

例えば

答え

id question_id 
1 1 
2 2 

answer_checkbox

id answer_id checkbox_id 
1 1   1 
2 2   3 

(値2 =>ラベル "B" でのみチェックボックスを選択)

answer_checkbox_int

answser_checkbox_id checkbox_option_int_id 
1     2 

(値1 =>ラベルを持つ唯一のチェックボックス "はい" を選択)

answer_checkbox_text

answser_checkbox_id checkbox_option_text_id 
2     1 
+0

これは私がカスタムフィールドのテーブルを定義するのに役立ちます。私の質問は、ユーザーが選択した値を保存する方法でした。私は、checkboxとcheckbox_option_textの多対多の関係として動作する別のテーブルを持つことができると思います。私はここで正しいですか? –

+0

はい、そうです。オプションを2つのテーブルに分割する場合、チェックボックスのタイプについてアプリケーション層をチェックする必要がありますが、これは比較的簡単です。それ以外の場合は、簡単にするために2つのテーブルをマージすることができます。 –

関連する問題