如何使用mysql和php编写系统来跟踪用户学习进度

时间:2012-04-01 01:53:13

标签: php mysql

我想知道如何使用mysql和php在线测验中有效地记录和显示用户的进度。如果用户想要跳过某些问题或关闭屏幕,我希望他们回过头来查看问题列表项目旁边的“已完成”所取得的进展。

问题或疑虑实际上是如何存储该进度以及如何检查它。

这是我为此问题简化的数据库设计

表1:用户 fields:id,username,pw,username,progress (是的,我在这里称为进展领域)

表2:问题 字段:id,lesson,question,hint,answer

因此,如果用户完成了一个问题,那么在进度字段中,我会在其中附加question_id。

在带有问题列表的主页上,我会抓住用户ID传递到页面后的进度字段,所以...

select progress from user where id = $user_id

我可能会使用已完成问题的所有ID来获取所有这些数组

然后我必须为每个问题做一个if语句“如果问题id =进度[id]然后回显”完成“”那种事情陈述。

这看起来效率如何?或者你会怎么做?我很感激任何在线教程都能做到这一点,所以我可以更好地了解正在发生的事情。谢谢

1 个答案:

答案 0 :(得分: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;