私は現在、PHP/MySQL を使用して調査の作成/管理 Web アプリケーションに取り組んでいます。データベース テーブルのいくつかの改訂を行ってきましたが、特定の種類の回答の保存について再考する必要があるかもしれないことに再び気付きました。
現在、次のようなテーブルがあります。
調査回答
id PK
eid
sesid
intvalue Nullable
charvalue Nullable
id = 各行に割り当てられた一意の値
eid = この回答が回答するアンケートの質問
sesid = 調査の「セッション」(調査の日時に関する情報) id
intvalue = 数値の場合の回答の値
charvalue = テキスト表現の場合の回答の値
これにより、MySQL の数学関数を引き続き使用して処理を高速化することができました。
しかし、私は新たな課題を見つけました: 複数の回答を持つ質問を保存することです。例は次のとおりです。
次のうち、あなたがよく食べるのはどれですか? (該当するものをすべて選択してください)
- ガールスカウトのクッキー
- ベーコン
- トウモロコシ
- 鯨脂
今、結果を保存したいとき、それを処理する最善の方法がわかりません。現在、次のような複数選択オプションの表があります。
調査要素オプション
id PK
eid
value
id = 各行に関連付けられた一意の値
eid = このオプションが関連付けられている質問/要素
value = そのオプションのテキスト値
このセットアップでは、返された複数選択の回答を、調査で選択された element_options 行のコンマ区切り ID の文字列として「survey_answers」に保存します。(つまり、「4,6,7,9」のようなもの)それが本当に最善の解決策なのか、それとも選択した各回答を保持する新しいテーブルを作成してから参照する方がより実用的かどうか疑問に思っています要素を参照し、最終的には調査を参照する特定の回答行。
編集
興味のある人のために、これが私が取ったアプローチです(PhpMyAdmin関係ビューで):
また、複数選択の質問のカウントを収集する基本的なクエリは次のようになります。
SELECT e.question AS question, eo.value AS value, COUNT(eo.value) AS count
FROM survey_elements e, survey_element_options eo, survey_answer_options ao
WHERE e.id = 19
AND eo.eid = e.id
AND ao.oid = eo.id
GROUP BY eo.value