在php中使用RAND()进行双重选择


Double selection with RAND() in php

请帮我解决这个问题。我正在构建一个考试系统,我使用Rand()函数从"question"表中选择问题。用户的答案也保存在"user_answer"表中。

现在我的问题是一个问题有时被选中两次或三次,所以我需要一个查询,将检查,如果一个问题已经回答在"user_answer"表,它应该从"question"表重新选择另一个问题。

不能直接使用Rand()进行排除。

如果您从数据库中查询,您可以添加类似

的内容
select *
from question q
left join user_answer ua on ua.question_id = q.id
where ua.id is null
group by q.id

这将尝试连接到一个答案(任何答案,您可能想要添加一些用户选择),并且只返回失败的问题(ua)。(Id为null)

如果您不能通过查询并将其全部放在PHP数组中,您可以做的是跟踪数组中可用的问题ID。每次您随机选择一个问题,您就从数组中删除该项(值!),并重新索引数组(保留作为问题ID的值,并将键从0排序到问题数- 1)。

这样您就可以再次执行rand(0, count($questionIds))来选择下一个。

另一种方法是使用循环,只要选择的问题已经在used questions数组中,就继续。