2017-01-10 4 views
1

複数のフォームから送信されたデータを保存する必要があります。これらのフォームはフォームビルダーによって作成されるため、ユーザーにアクセス権を与える予定です。フォーム、またはユーザーが送信するフィールド数を指定します。私は、次のようなテーブル構造(フォーム自体を含むため、PHPとして保存される)について考えている:未知数のフィールドがmysqlに入力されました - これに最適な構造ですか?

| FormId | FormType | InputID | InputType | LongText | Text | Date | 

フォームID(例えば以下)を含むのフォームファイルなどの位置を記憶する別のテーブルに関連して、入力IDは、ページの入力に関連しています。

| FormId | FormType | PathToForm | DateCompleted |...etc 

入力「」フォームID 1から次のようになります。

入力に対し
<input id="a" name="a" type="text" value="example"/> 

「」フォームID 2から次のようになります。私はに書き込むことができます

<textarea name="a" id="a"></textarea> 

このような表:

| FormId | FormType | InputID | InputType | LongText | Text | Date | 
-------------------------------------------------------------------------- 
| 1 |  1 | a | text | NULL | example | NULL | 
| 2 |  2 | a | textarea | example | NULL | NULL | 

nu各フォームの「入力」の数は無制限です。異なるフォームテンプレートの入力は、毎回異なる「タイプ」である可能性があります。

私の質問(ついに!) - これは私がこれを行うことができる最良の方法ですか?私は、1行につきフォームの出力を保存することは、理想的ではないことを知っています。しかし、何百ものテーブルを持たずに、将来的に(FormTypeによると)他の方法で構造化することはできません。前にこのようなことは起こっていません。

+0

我々が扱っているそのような製品の1つは、Gravity Formsです。彼らのデータ構造を見たいかもしれません:) –

+0

EAVタグを参照してください - 議論がたくさんあります。 –

答えて

0

この状況のた​​めに作られたmysql 5.7テーラーには何かがあります。 JSON type

あなたができることは、フォームを連想配列に変換してJSONフィールドに保存することです。

ただし、このフィールドは検索可能ですが、通常のvarcharカラムと同じように検索すると効率的ではありません。さらに、join you are in deep troubleでそれを使用したい場合。

+0

それはちょうどチケットのように見える - 私も1つの私のテーブルをスクラップすることができるように見えます!検索については注意してください - フィールドを保持するのに十分シンプルで、私は今検索可能にしたいと思っています。今私がしなければならないことは、共有ホスティングが5.6から5.7に更新されるのを待つことだけです! –

+0

あなたは5.7 :-)を提供する会社に切り替えることができます – e4c5

関連する問題