Лучший способ сохранить результаты нескольких опросов для каждого пользователя? - PullRequest
2 голосов
/ 08 мая 2009

У меня есть опрос, который имеет пять 1-5 звездных оценок, и мне нужно хранить значения индивидуально для каждого пользователя. Есть ли метод, похожий на битовые поля, где я могу хранить перечисленные значения (1, 2, 3, 4 или 5 для каждого рейтинга) и легко извлекать их?

На данный момент лучше всего хранить сериализованный массив PHP, однако это займет немного места. Или создайте 5 столбцов, которые я также предпочел бы не делать (потраченное впустую пространство).

Ответы [ 3 ]

2 голосов
/ 08 мая 2009

Ну, что бы вы ни делали, определенно не денормализуйте, создав столбец для каждого возможного ответа. Если вы используете базу данных, самый гибкий способ - хранить ваши данные примерно так:

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 голос
/ 08 мая 2009

Моя первая мысль об этом заключается в использовании и сохранении таких значений:

$a="15540";

Пользователь не ответил на последний вопрос. $ a [0] - это значение первого голоса, которое составляет: 1.

Может быть, не самый быстрый, но простой.

0 голосов
/ 08 мая 2009

Учитывая, что это опрос, в какой-то момент вы захотите получить статистику.

Вы можете либо сохранять плоские ответы в CHAR(5) или VARCHAR(5), и в этом случае вы будете использовать MySQL String Functions для получения индивидуального значения ответа. Если вам не нужно вычислять статистику в БД, просто выберите строку. В PHP вы можете обращаться к строковым элементам так же, как к элементам массива в квадратных скобках. $answers = "42133"; $first_answer = $answers[0]; $second_answer = $answers[1]; и так далее. Вы можете построить строку ответа, заключив $answers = $first_answer . $second_answer . $third ... или применив массив $answers = implode($answer_array);

Более простой подход - нормализовать БД, как предложил Артем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...