显示随机问题

时间:2015-03-03 06:46:43

标签: php mysql

我正在设计一个测试,我希望随机显示问题。我在数据库中有50个问题。为此我写了以下代码:

$singleSQL = mysql_query("SELECT * FROM questions WHERE id='$question' ORDER BY Rand()"); 

        while($row = mysql_fetch_array($singleSQL)){
            $id = $row['id'];
            $thisQuestion = $row['question'];
            $type = $row['type'];
            $question_id = $row['question_id'];
            $q = '<h2>'.$thisQuestion.'</h2>';
            $sql2 = mysql_query("SELECT * FROM answers WHERE question_id='$question' ORDER BY rand()");
            while($row2 = mysql_fetch_array($sql2)){
                $answer = $row2['answer'];
                $correct = $row2['correct'];
                $answers .= '<label style="cursor:pointer;"><input type="radio" name="rads" value="'.$correct.'">'.$answer.'</label> 
                <input type="hidden" id="qid" value="'.$id.'" name="qid"><br /><br />
                ';

            }
            $output = ''.$q.','.$answers.',<span id="btnSpan"><button onclick="post_answer()">Submit</button></span>';
            echo $output;
           }

第一行中的这个rand()函数不适用于问题但是相同的函数用于答案(MCQ的选项随机出现)。 此外,当我在第一行的sql查询中进行更改时,我收到错误:

警告:

mysql_fetch_array() expects parameter 1 to be resource
boolean given in C:\xampp\htdocs\questions.php on line 36
undefined.

我不知道什么是错的!!请帮帮我.. !!

2 个答案:

答案 0 :(得分:0)

第一个查询中的WHERE id = '$question'子句使其只返回与该ID匹配的单个问题,而不是所有问题。你需要删除它。

$singleSQL = mysql_query("SELECT * FROM questions ORDER BY Rand()"); 

在循环中,你在第二个查询中使用了错误的变量。它应该是:

$sql2 = mysql_query("SELECT * FROM answers WHERE question_id='$question_id' ORDER BY rand()");

答案 1 :(得分:0)

有关ORDER BY Rand()的更多信息:

ORDER BY Rand()在使用小型数据库(例如1000行)时工作正常。但是当谈到大型数据库时,它会导致性能问题。读 this article了解更多信息和替代解决方案。

至于你的问题,Barmar指出代码究竟出了什么问题。

1. $singleSQL = mysql_query("SELECT * FROM questions WHERE id='$question' ORDER BY Rand()");

在这里,你只是随机化了一行没有任何意义。

2. mysql_query("SELECT * FROM answers WHERE question_id='$question' ORDER BY    rand()");

它应该是WHERE id ='$ question_id'而不是WHERE id ='$ question'