我尝试开发考试管理系统。我不要一样 问题或相同的 ID 未显示第二次或其他任何时间考试 a 用户。如何给出这个条件?
我的函数是:
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;
}
您需要跟踪已经提出的问题。 如果您不希望仅为会话再次选择问题,则可以将问题 ID 保存到会话中。
您可以将数组初始化为会话 $_SESSION['questions_asked'] = array((; 然后一旦提出问题,你会
array_push([THE QUESTION ID], $_SESSION['questions_asked']);
当然,对于提出的任何问题,您需要将[问题ID]替换为SQL ID。
请记住,您需要修改查询以考虑会话中保存的任何内容。
如果您不希望它们再次显示,则需要记录用户看到了哪些问题,并且可能需要将其永久存储在数据库中。
也许你可以有一个表来存储每个用户的那些
user_question_asked
至少具有这 2 列
[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;`
希望有帮助,我不确定您的表/列结构是什么,但这是我解决此问题的一些建议。