PHP查询随机

时间:2015-12-16 07:33:21

标签: php html mysql

我已成功将我的测验随机化,但我现在面临的问题是,即使已经回答了问题,也会再次显示某些问题。我还有一个问题是限制将从数据库中检索的问题。我想让问题在测验中只被随机显示一次,并且只从数据库中选择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>

5 个答案:

答案 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;解决你的问题。

http://www.techonthenet.com/mysql/functions/rand.php

答案 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个问题进行测试