【问题标题】:how to code a system to track user learning progress using mysql and php如何使用 mysql 和 php 编写一个系统来跟踪用户的学习进度
【发布时间】:2012-04-01 01:53:12
【问题描述】:

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

真正的问题或担忧在于如何存储该进度以及如何检查它。

为了这个问题,我的数据库设计被简化了

表 1:用户 字段:id、用户名、密码、用户名、进度 (是的,我在这里有一个叫做进步的领域)

表 2:问题 字段:id、课程、问题、提示、答案

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

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

select progress from user where id = $user_id

我可能会得到所有这些数组以及已完成问题的所有 ID

然后我必须为每个问题做一个 if 语句“if question id = progress [id] then echo "completed"”之类的事情语句。

这看起来有效吗?或者你会怎么做?我会很感激任何在线教程做这种事情,这样我就可以更好地了解正在发生的事情。谢谢

【问题讨论】:

  • 这里有一个普遍的原则:任何时候你在设计一个数据库并且你将相同类型实体的多个实例连接在一起并将结果填充到一个列中,你几乎肯定已经出错了。

标签: php mysql


【解决方案1】:

我会将已回答的问题存储在他们自己的表格中。

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    • 1970-01-01
    • 2011-03-11
    • 2011-04-12
    • 2012-04-03
    相关资源
    最近更新 更多