我正在设计一个测试,我希望随机显示问题。我在数据库中有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.
我不知道什么是错的!!请帮帮我.. !!
答案 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'