我已成功将我的测验随机化,但我现在面临的问题是,即使已经回答了问题,也会再次显示某些问题。我还有一个问题是限制将从数据库中检索的问题。我想让问题在测验中只被随机显示一次,并且只从数据库中选择5个问题作为例子。
<form class="form-horizontal col-xs-offset-2" id="form" action="SubmitMainForm" method="post">
<div class="form-group">
<label class=" col-xs-1" for="test1">test1</label>
<div class="col-xs-3">
<input class="form-control " type="text" name="test1" id="test1">
</div>
<label class=" col-xs-1" for="test2">test2</label>
<div class="col-xs-3">
<input class="form-control " type="text" name="test2" id="test2">
</div>
</div>
<div class="form-group">
<label for="description" class="col-xs-1">Description</label>
<div class="col-xs-5">
<textarea rows="3" cols="30" name="ta_description" id="ta_description"></textarea>
</div>
</div>
<div class="form-group">
<label for="description" class="col-xs-1">Description</label>
<div class="col-xs-3">
<textarea rows="3" cols="30" name="ta_description" id="ta_description"></textarea>
</div>
<label for="description" class="col-xs-1">Description</label>
<div class="col-xs-3">
<textarea rows="3" cols="30" name="ta_description" id="ta_description"></textarea>
</div>
</div>
</form>
答案 0 :(得分:1)
使用join
。不需要两个不同的查询
SELECT * FROM questions q join answers a
on q.question_id=a.question_id
ORDER BY RAND() LIMIT 1
答案 1 :(得分:1)
我们需要从答案中不存在的问题中随机选择5行。
SELECT questions.* FROM questions
LEFT JOIN answers ON questions.id=answers.question_id
WHERE answers.question_id IS NULL
ORDER BY RAND() LIMIT 5;
答案 2 :(得分:0)
您可以使用&#34; SEED&#34;解决你的问题。
答案 3 :(得分:0)
为防止再次出现,您必须使用NOT IN
子句并使用里面的数组变量进行检查。每次将问题ID放入循环中的数组中,然后根据条件运行查询。像:
$ArrVar=array();
循环从这里开始
SELECT * FROM questions Where QuestionID NOT IN ($ArrVar) ORDER BY RAND() LIMIT 1"
将问题ID分配给数组变量:
$ArrVar[$ind] = $row['id'];
答案 4 :(得分:0)
你可以在php中创建一个独特的随机id数组并传递该数组来获取问题,是的,加入问题和答案表可以保存你的一个数据库查询。
$arr = [];
for($i=0;$i<5;$i++){
$a = rand(min_id,max_id);
if(!in_array($a,$arr)){
$arr[] = $a;
}
}
并且您的sql1语句类似于以下内容::
$ sql1 = mysql_query(“SELECT * FROM questions WHERE id IN”。$ arr);
这应该解决你的两个问题,即不重复问题并对5个问题进行测试