2012-04-01 57 views
0

我想知道如何高效地記錄並與MySQL和PHP的在線測試顯示用戶的進度跟蹤用戶的學習進度。如果用戶想跳過某些問題或關閉屏幕,我希望他們回來看看問題列表項目旁邊的「已完成」所取得的進展。如何編寫一個系統中使用MySQL和PHP

的問題或關心真的是如何去存儲方面的進展以及如何檢查它。

這裏是我的數據庫設計簡化了這個問題的緣故

表1:用戶 字段:ID,用戶名,PW,用戶名,進步 (是的,我有叫這裏進步領域)

表2 :問題 字段:ID,教訓,問題,提示,回答

所以,如果一個用戶完成一個問題,然後在進度場,我會追加question_id在那裏。

在有問題名單網頁,我將有一個獲取用戶ID的進度字段它傳遞到頁面,以便之後...

select progress from user where id = $user_id 

我可能會得到所有這些陣列已完成的問題

所有的ID然後我會寫:「如果問題ID =進展[ID],然後回聲‘完成’」樣的事情語句來if語句做每一個問題。

這個問題似乎高效?或者你會怎麼做?我很欣賞網上的任何教程都能做到這一點,所以我可以更好地瞭解發生了什麼。感謝您在自己的表

+0

這是一個總的原則:任何時候你在設計一個數據庫,你是串聯將同一類型實體的多個實例組合在一起,並將結果填充到一列中,這幾乎肯定已經出錯了。 – 2012-04-01 02:32:26

回答

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;