从 MySQL 随机选择记录


random record selection from mysql

我有一个数据库,有四个字段QiD主键,问题,答案,分数。我想一次随机回答一个问题...但是对于参加测验的用户,问题 nos 应该是从 1 到 N,其中 N 是总编号。的问题。

当用户选择选项(单选按钮)时。应将其与该问题的答案字段的数据进行比较,并应更新分数。

我尝试了几个技巧,但没有得到它...请帮助我..

有很多方法可以做到这一点,你可以使用 RAND() 函数,但它在性能方面不是很好:

SELECT * FROM question
ORDER BY RAND()
LIMIT 1

一个更快的方法是确定PHP(或其他语言)中的随机数:

// first request
SELECT MAX(id) FROM question
// PHP part
$random = rand(0, $theMaxId);
// SQL request to get a random question
SELECT * FROM question WHERE id = $random

有关SQL版本,请参阅:MySQL从600K行中快速选择10个随机行

编辑(使用 PDO 的完整示例):

$req = $db->query('SELECT MAX(id) as nbr FROM question');
$rep = $req->fetch();
$theMaxId = $rep['nbr'];
$random = rand(0, $theMaxId);
// SQL request to get a random question
$req = $db->prepare("SELECT * FROM question WHERE id = :id");
$req->bindParam(':id', $random, PDO::PARAM_INT);
$req->execute();
$question = $req->fetch();
// here you are :)

在你的 mysql 查询中试试这个

SELECT column FROM table
ORDER BY RAND()
LIMIT 1

使用"按 rand() 排序"从表中获取随机问题

并更新分数:

将 Qid 指定为 id 到单选按钮。例如:输入类型="无线电" id="2"

单击检查使用Ajax天气是否正确,并分别更新分数。

将问题保存到数组中。

while ($row = mysqli_fetch_array($results, MYSQL_NUM)){  $questions[] = $row[0];}
shuffle($questions);shuffle($questions);shuffle($questions);
$ndx = 0;

然后一次抓住一个问题。

$question= array_slice($questions, $ndx, 1);
$ndx++;

您不会收到重复的问题。
性能非常出色。

第 1 行:从查询结果创建数组问题(不包括查询)
第 2 行:随机洗牌问题 3x 数组以进行随机化。

生成问题网页
(未经测试)

echo '<div id="questionBox"><form method="POST" action="score.php" >';
  foreach ($question as $k=>$q){
    echo "<div id='"q$k'"><fieldset><legend>$k</legend><div class='"q'">$q[1]</div><input class='"true'" type='"radio'" name='"a$q[0]'" value='"1'"  />&ensp;True</div><br><div id='"a$question[0]'" class='"false'"><input class='"false'" type='"radio'" name='"a$q[0]'" value='"0'"  />&ensp;False</div><button onclick='"next($k)'">Next</button></fieldset></div>'n";
  }
echo '<div id="q' . $k . '"><input type="submit" name="Score"  Value="Score" /></div></form></div>";

.JS
(未经测试)

echo <<<EOT
<script type="text/javascript">
//<![CDATA[
var q = new Array;
var divs = document.getElementsByTagName("div");
for (var div=1;div<divs.length;div++){
  did = divs[div].getAttribute("id");
  if (did == null){continue;}
  divs[div].style.display='none;
  q.push(div);
} 
document.getElementById['q1'].style.display='block';
function next(a){
  q[a].style.display='none;
  q[a+1].style.display='block;
}
//]]>
</script>
EOT;