2009-05-08 3 views
2

5 개의 1-5 개의 별점을 가진 설문 조사가 있는데 각 사용자마다 값을 개별적으로 저장해야합니다. 비트 필드와 비슷한 방법으로 열거 형 값 (각 등급에 대해 1, 2, 3, 4 또는 5)을 저장하고 쉽게 추출 할 수 있습니까?여러 설문 조사 결과를 사용자별로 저장하는 가장 좋은 방법은 무엇입니까?

현재 최선의 방법은 직렬화 된 PHP 배열을 저장하는 것이지만 약간의 공간이 필요합니다. 또는 5 열을 만드십시오.이 열은 사용하지 않는 것이 좋습니다 (낭비 된 공간). 이것에 대해

+0

낭비되는 공간에 신경을 쓰지 만 예상되는 데이터의 양에 대해서는 언급하지 않았습니다. 수백만 가지 등급을 기대합니까? – cherouvim

답변

1

내 첫번째 생각은 사용하고 같은 값을 저장한다 :

$a="15540"; 

사용자는 마지막 질문에 대답하지 않았다. $ a [0]은 첫 번째 투표의 값입니다. 1.

아마도 가장 빠르지 만 간단하지 않을 수 있습니다.

+1

5 문자로 설정된 zerofill과 함께 가장 쉬운 해결책이 될 수 있습니다. –

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) 

유지하는 가장 쉬운처럼 뭔가에 데이터를 저장하는 것입니다.

+0

나는 이것을 길 아래로 생각할 것이다. 대답 주셔서 감사합니다, 나는 그것을 감사드립니다. –

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이 제안한 것처럼 데이터베이스를 정규화하는 것입니다.

관련 문제