2012-03-12 15 views
0

私の目的は簡単だと思うので、私はdb駆動型の複数選択クイズを作成する必要があります 私のプロジェクトに追加するCMS。カテゴリごとにクイズを作成し、クイズごとに10個の質問を追加し、1個の回答で4個の質問を追加できるようにする必要があります。私は2つの分野で悩まされてきました。PHPを動かすことに困ったクイズ

  1. データベース構造。私はこれを行うためにデータベースをどのように構造化できますか? question_answers、quizzesなどのテーブルを作成します。

  2. ユーザーがクイズを取った後、スコアを取得して独自のテーブルに保存したいと考えています。私はスコアをデータベースに入れる方法を知っていますが、それに対応する質問と、それに対応する答えと、正しいラジオボタンの正しい答えとを、どのように表示しますか?

私には非常に面倒ですが、多分あなたの天才のうちにはいないかもしれません。

敬具、

ショーン

+3

を、あなたは何を試してみましたか?スタックオーバーフローは、開発者が非常に特定の質問に対する回答を得るために作成されました。あなたの質問は、誰かがあなたのためにすべてのコードを書いてくれるように思えます。 – evasilchenko

+0

Sean - これまでに試したサンプルコードを提供し、遭遇している重大な問題や問題に対処する必要があります。誰かがあなたのために仕事をして完全な解決策を提供するとは思わないでください。 – Michal

+0

誰かが私のためにコードを作成したくない。私が知る必要があるのは、例えば、私の問題の内訳です。私の答えにはほとんどのコードは必要ありません。問題は問題を考え出すことです。私は一般的にどのように私はそれについて行くつもりだ知っているまで、コードを記述しないでください。私に例を挙げてみましょう。 Sean - 最初の部分では、______を実行して2つの表を結合できます。それは時間を節約し、長期的にはより簡単です。 –

答えて

2

はあなたのために、このテーブル構造をクリックしました。外部キー制約はオプションです。

CREATE TABLE IF NOT EXISTS `answer` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `question_id` int(10) unsigned NOT NULL, 
    `answer` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `question_id` (`question_id`) 
) ENGINE=InnoDB ; 

CREATE TABLE IF NOT EXISTS `question` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `quiz_id` int(10) unsigned NOT NULL, 
    `question` varchar(500) NOT NULL, 
    `correct_anwer_id` int(10) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `quiz_id` (`quiz_id`,`correct_anwer_id`), 
    KEY `correct_anwer_id` (`correct_anwer_id`) 
) ENGINE=InnoDB ; 

CREATE TABLE IF NOT EXISTS `quiz` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `category` int(10) unsigned NOT NULL, 
    `title` varchar(100) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB ; 

ALTER TABLE `answer` 
    ADD CONSTRAINT `answer_ibfk_1` FOREIGN KEY (`question_id`) REFERENCES `question` (`id`); 

ALTER TABLE `question` 
    ADD CONSTRAINT `question_ibfk_2` FOREIGN KEY (`correct_anwer_id`) REFERENCES `answer` (`id`), 
    ADD CONSTRAINT `question_ibfk_1` FOREIGN KEY (`quiz_id`) REFERENCES `quiz` (`id`); 

、テストを保存するため、ユーザーが撮影している:周りを再生する

CREATE TABLE IF NOT EXISTS `test` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `user_id` int(10) unsigned NOT NULL, 
    `quiz_id` int(10) unsigned NOT NULL, 
    `date_taken` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    `score` mediumint(9) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `quiz_id` (`quiz_id`) 
) ENGINE=InnoDB ; 

CREATE TABLE IF NOT EXISTS `test_answer` (
    `test_id` int(10) unsigned NOT NULL, 
    `question_id` int(10) unsigned NOT NULL, 
    `answer_id` int(10) unsigned NOT NULL, 
    `single_score` mediumint(9) NOT NULL, 
    PRIMARY KEY (`test_id`,`question_id`), 
    KEY `question_id` (`question_id`), 
    KEY `answer_id` (`answer_id`) 
) ENGINE=InnoDB ; 

ALTER TABLE `test` 
    ADD CONSTRAINT `test_ibfk_1` FOREIGN KEY (`quiz_id`) REFERENCES `quiz` (`id`); 

ALTER TABLE `test_answer` 
    ADD CONSTRAINT `test_answer_ibfk_3` FOREIGN KEY (`answer_id`) REFERENCES `answer` (`id`), 
    ADD CONSTRAINT `test_answer_ibfk_1` FOREIGN KEY (`test_id`) REFERENCES `test` (`id`), 
    ADD CONSTRAINT `test_answer_ibfk_2` FOREIGN KEY (`question_id`) REFERENCES `question` (`id`); 

いくつかのサンプルデータ:

INSERT INTO `answer` (`id`, `question_id`, `answer`) VALUES 
(3, 1, 'stackoverflow.com '), 
(4, 1, 'example.com'); 

INSERT INTO `question` (`id`, `quiz_id`, `question`, `correct_anwer_id`) VALUES 
(6, 1, 'What is the best website on the whole internet?', 3); 

INSERT INTO `quiz` (`id`, `category`, `title`) VALUES 
(1, 1337, 'My Great Quiz. Take me!'); 
+0

これは私が心に留めていたことです。ユーザーが質問に答えると、ラジオを回答テーブルと比較して正しい回答があるかどうかがわかりますか? –

+0

正解は 'question.correct_answer_id'列に参照として保存されます。すべての質問は正解が1つしかないので(私の前提)、それを 'question'テーブルに保存しました。 – Basti

+0

ありがとう!私は今それを持っていると思う –

関連する問題