2

質問する前に、昨日私の質問に回答してくれたすべての人に感謝したいと思います -> Countdown using javascript

考え:

PHP を使用してクイズを作成しましたが、MySQL データベースを作成し、すべての質問、回答、複数の選択肢が内部に格納されたテーブルを作成したいと考えています。

問題:

クイズは複数選択なので、複数選択オプションをテーブルに保存する方法がわかりません。オプションを保存し、各回答を特殊文字で区切って、php に文字列を取得させ、オプションを分離させることはできますか?

例:質問:好きな色は何ですか?オプション: 青=赤=紫=黄.(データベース ビュー)

このようなことのベストプラクティスは何だと思いますか?

4

6 に答える 6

2

複数のテーブルを使用するのがベストプラクティスだと思います。1 つは質問用、もう 1 つは回答用です。answerテーブルquestion_idには、正解かどうかのフラグだけでなく、フラグも含まれます。

このように見えるかもしれません

TABLE questions
FIELDS: id, text

TABLE answers
FIELDS: id, question_id, text, correct

すべての回答に 1 つのフィールドを使用する場合の問題は、回答のテキスト内で分割に使用する文字を誤って使用する可能性があることです。

于 2013-03-28T12:12:52.773 に答える
2

簡単に、2 つのテーブルを作成します。

  • 質問

    question_id、質問

  • 答え

    answer_id, question_id, 回答

これで、 question_idを使用してこれら 2 つのテーブルをリンクできます

于 2013-03-28T12:13:39.687 に答える
2

テーブル:

クイズ

quiz id (pk)
quiz info (other columns)

質問

question id(pk)
quiz id
question text

答え

answer id(pk)
question id
answer text

特定の質問を表示するには、クイズ、質問、および回答を結合します。

編集:「正しい/間違った答え(0/1)」の列を追加するか、別の表を作成できます:

ソリューション

ソリューション ID(pk)
質問 ID
回答 ID

answersそれは良い正規化ではないので、表に「正解」を入れませんでした。

于 2013-03-28T12:13:43.037 に答える
2

これにはいくつかの方法があります。

  • 「適切な」方法は、別のテーブルを作成することです(それぞれが一意のIDを持つ「質問」と呼ばれるテーブルと、それぞれが質問IDを持つ「回答」と呼ばれる別のテーブルを持つようにします)
  • フィールドでの特殊文字などの使用を処理する JSON ( json_encodeおよびjson_decodeを参照) を使用する「単純な」方法
于 2013-03-28T12:13:57.547 に答える
2

これには多くのスキーマ設計が考えられますが、私の提案は次のようなものです。

テーブルにコンマで区切られた値を保存しないでください。

このテーブルにはクイズがあります。

クイズテーブル

  • クイズID (PK)
  • 他のコラム..

これは、すべてのクイズの問題を保持します。

質問表

  • 質問ID (PK)
  • 質問内容
  • クイズ ID (FK)
  • 他の列...

これには答えがあります。

回答表

  • アンサー ID (PK)
  • 回答詳細

これが各クイズのすべての問題の正解、つまり答えの鍵です。

Question_Answer_Correct テーブル

  • QuestionID (FK) -- AnswerID を持つ複合主キーでもあります
  • AnswerID (外部キー)

これには、ユーザーのリストが含まれます。

ユーザーテーブル

  • ユーザー ID (PK)
  • ユーザー名
  • 他の列...

これには、指定された質問に対するユーザーの回答が含まれます。QuizIDクイズ台で問題がつながっているのでここはありません。

User_Answers テーブル

  • ユーザー ID (外部キー)
  • QuestionID (外部キー)
  • AnswerID (外部キー)
于 2013-03-28T12:14:12.557 に答える
2

questions次のような表があります。

id  |            question
0             Do you even lift?

idだろうがINT(11) PRIMARY_KEY AUTO_INCREMENTquestionただだろうTEXT。次に、answersテーブルがあります。

id  | question_id | answer
0          0         Yes
1          0         No
2          0         Maybe

ここでquestion_idは、テーブル内の質問の ID を参照しquestionsます。これらの答えはすべて 1 つの質問に属します。Has many1 つの質問には多くの回答があるため、これを関係と呼びます。

これが通常のやり方です。フレームワークを使用していなくても、実装はそれほど難しくありません (ほとんどのフレームワークが作業を行います)。

お役に立てれば

于 2013-03-28T12:15:49.110 に答える