2009-05-08 12 views
2

5つの1-5つ星評価を持つ投票があり、ユーザーごとに値を個別に保存する必要があります。ビットフィールドに似た方法があります。これらの列挙値(各レーティングに対して1,2,3,4,5)を保存して簡単に抽出できますか?複数の質問の投票結果をユーザー単位で保存する最も良い方法は?

私の最善の策は、シリアル化されたPHP配列を格納することですが、それは少しのスペースを占めることになります。または、5つの列を作成します。これも実行しないことをお勧めします(無駄なスペース)。これについて

+0

あなたは無駄なスペースを気にしますが、どれくらいのデータが必要なのかは言及していません。何百万という評価を期待していますか? – cherouvim

答えて

1

私の最初の考えは使用して格納される。このような値:

$a="15540"; 

ユーザーが最後の質問に答えていませんでした。 $ a [0]は最初の投票の値です。1.

おそらく最も速くはないが単純です。

+1

zerofillを5文字に設定すると、これが最も簡単な解決策になります。 –

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のようにDBを正規化することです。

関連する問題