我尝试开发考试管理系统。我不要一样 问题或同一个ID未显示第二次或其他任何时间的考试 用户。这种情况怎么给?
我的功能是:
public function qustionShow($question, $limit=4){
$show = $this->conn->query("select * from question where cat_id ='$question' ORDER BY RAND() LIMIT $limit");
while ($row=$show->fetch_array(MYSQLI_ASSOC)){
$this->qus[]=$row;
}
return $this->qus;
}
答案 0 :(得分:1)
您需要跟踪已经问过的问题。您可以将问题ID保存到会话中,如果您不想再次为会话选择问题。
您可以初始化会话的数组 $ _SESSION ['questions_asked'] = array(); 然后问了一个问题
array_push([THE QUESTION ID], $_SESSION['questions_asked']);
对于任何被问到的问题,您当然都需要用sql id替换[QUESTION ID]
请记住,您需要修改查询以解决会话中保存的所有内容。
如果您不希望再次显示它们,则需要记录用户已经看到的问题,并可能需要将其永久存储在数据库中。
可能您可以有一个表来存储每个用户的表
user_question_asked
至少包含这两列
[user_id] [question_id]
因此,每次询问问题时,您都要插入当前用户ID和问题ID
那么您的查询可能是
SELECT * FROM question where cat_id ='$question' AND [QUESTION_ID] NOT IN
(SELECT question_id from user_question_asked where user_id [CURRENT USER's ID]
) ORDER BY RAND() LIMIT $limit;`
希望有帮助,我不确定您的表/列结构是什么,但这是解决该问题的一些建议。