2012-04-01 14 views
0

mysqlとphpを使ってオンラインクイズでユーザーの進行状況を効率的に記録して表示する方法を知りました。ユーザーが特定の質問をスキップしたり、画面を閉じる場合は、質問リスト項目などの隣に「完了」が表示され、進捗状況が表示されます。mysqlとphpを使ってユーザーの学習進捗状況を追跡するシステムをコーディングする方法

問題または懸念は、実際に進行状況を保存する方法とそれを確認する方法です。ここで

は私のデータベース設計は、この質問のために簡略化されています

表1:ユーザー フィールド:ID、ユーザ名、PW、ユーザ名、進捗

表2(はい、私はここに進歩と呼ばれるフィールドを持っています) :questions フィールド:ID、レッスン、質問、ヒント、回答

ユーザーが質問を完了した場合、進捗フィールドにquestion_idを追加します。質問リストとホームページに

それがそのようにページに渡された後、私はグラブにユーザIDの進捗フィールドを持っているでしょう...

select progress from user where id = $user_id 

私はおそらく持つすべてのこれらの配列を取得したいです完成した質問のすべてのIDです

次に質問ごとにifステートメントを実行する必要があります。 "質問ID =進捗[ID]とエコー"完了した "という種類のステートメント。

これは効率的ですか?それ以外の方法は?この種のことを行うチュートリアルをオンラインでお試しいただければ幸いです。ありがとうございました

+0

を得ることができ、一般的な原則です:あなたは、データベースを設計しているとあなたが連結されているすべての時間同じ種類のエンティティの複数のインスタンスを一緒にして、結果を1つの列に詰め込むことは、ほとんど間違いなく既に間違っています。 –

答えて

3

自分のテーブルに回答した質問を保存します。

question_id | user_id 
    1   1 
    2   1 
    13   1 

今、あなたは、効率的にここですべて完了した質問に

SELECT q.* 
FROM questions q 
INNER JOIN answered_questions aq ON aq.question_id = q.id AND aq.user_id = 1; 

か、まだ完了していない質問

SELECT q.* 
FROM questions q 
LEFT JOIN answered_questions aq ON aq.question_id = q.id AND aq.user_id = 1 
WHERE aq.id IS NULL;