以每个用户为基础存储多个问题调查结果的最佳方法?

时间:2009-05-08 06:05:42

标签: php mysql

我的投票有5个1-5星评级,我需要为每个用户单独存储值。是否有类似于位域的方法,我可以存储这些枚举值(每个评级为1,2,3,4或5)并轻松提取它们?

目前我最好的办法是存储一个序列化的PHP数组,但这会占用一些空间。或者,创建5列,我也不想这样做(浪费的空间)。

3 个答案:

答案 0 :(得分:2)

好吧,不管你做什么,绝对不要通过为每个可能的答案创建一个列来进行非规范化。如果您使用的是数据库,最灵活的方法是将数据存储在这样的

table polls
poll_id
description

table poll_questions
question_id
poll_id (foreign key to polls)
question_text

table question_answers
answer_id
question_id (foreign key to poll_questions)
answer_text

table user_answers
id
user_id (foreign key to users)
answer_id (foreign key to question_answers)

最容易维护,但由于连接速度不是最快,您可能需要这样做。

答案 1 :(得分:1)

我首先想到的是使用和存储这样的值:

$a="15540";

用户没有回答最后一个问题。 $ a [0]是第一次投票的价值:1。

也许不是最快但很简单。

答案 2 :(得分:0)

考虑到这是一项民意调查,您希望在某些时候获得一些统计数据。

您可以将答案平展存储在CHAR(5)VARCHAR(5)中,在这种情况下,您将使用MySQL String Functions来获取单个答案值。如果您不需要在DB中计算统计数据,那么只需选择字符串即可。在PHP中,您可以像访问带方括号的数组元素一样访问字符串元素。 $answers = "42133"; $first_answer = $answers[0]; $second_answer = $answers[1];等等。您可以通过联合$answers = $first_answer . $second_answer . $third ...或通过插入数组$answers = implode($answer_array);来构建答案字符串

更简单的方法是像Artem建议的那样规范化数据库。