我的投票有5个1-5星评级,我需要为每个用户单独存储值。是否有类似于位域的方法,我可以存储这些枚举值(每个评级为1,2,3,4或5)并轻松提取它们?
目前我最好的办法是存储一个序列化的PHP数组,但这会占用一些空间。或者,创建5列,我也不想这样做(浪费的空间)。
答案 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建议的那样规范化数据库。