我想知道如何使用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]然后回显”完成“”那种事情陈述。
这看起来效率如何?或者你会怎么做?我很感激任何在线教程都能做到这一点,所以我可以更好地了解正在发生的事情。谢谢
答案 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;