我目前正在使用 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 = 该选项的文本值
使用此设置,然后我将返回的多项选择答案存储在“survey_answers”中,作为调查中选择的 element_options 行的逗号分隔 ID 字符串。(即类似“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