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

时间:2016-09-29 12:14:45

标签: php mysql

我正面临这个问题,我需要帮助。我正在建立一个考试系统,我正在使用Rand()函数从“问题”表中选择问题。用户的答案也保存在“user_answer”表中。

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

1 个答案:

答案 0 :(得分:0)

您无法直接使用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

这将尝试连接到一个答案(任何答案,您可能希望在其中添加一些用户选择),并且只返回FAILS(ua.id为空)的问题。

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

这样你就可以再次使用rand(0,count($ questionIds))来选择下一个。

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