下一个和上一个mysql数据库记录随机


next and previous mysql database records randomly

我正在进行基于计算机的测试,并且无法从数据库中随机获得问题,下一个按钮显示以前未显示的问题,前面的按钮显示以前显示的问题。我有这个密码,有人能帮我吗?

$specqtn = mysql_query("SELECT * FROM question_reg 
WHERE courseid = '$id'") or die (mysql_error());    
while ($specqtnrow = mysql_fetch_array($specqtn)){
    $qtnid = $specqtnrow['qtnid']."<br>";
} 
echo "<tr><td>Question</td><td>$qtncontent</td></tr>";
while ($i < $count){
    $sql = mysql_query("SELECT * FROM mdlopt 
    WHERE qtnid = $qtnid ORDER BY RAND()") or die (mysql_error()); 
    while($sqlrow = mysql_fetch_array($sql)){
        $count = mysql_num_rows($sql);
        $optid = $sqlrow['optid'];
        $optval = $sqlrow['optval']."<br>";
        echo "<tr><td></td><td><input name='radiobutton' type='radio'    value='$qtnid'/>$optval</td></tr>";
        $i++;
    }
}
echo "<tr><td></td><td><input name='Previous' type='submit' id='Previous'  value='Previous' />";
echo "<input type='submit' name='Next' value='next'>";
echo "<input type='submit' name='Submit' value='Submit' /></td></tr>";

嗨,在您的代码中,您正在从表中检索所有行。只要把限制在你的SQL查询,你会得到你正在寻找的。

取决于你对"下一个"answers"上一个"的定义。我假设它是courseid的阶。要获取下一行,您可以编写如下查询:

SELECT * FROM question_reg
WHERE courseid > '$id'
ORDER BY courseid ASC
LIMIT 1

和这个查询来获得前一个:

SELECT * FROM question_reg
WHERE courseid < '$id'
ORDER BY courseid DESC
LIMIT 1

我认为有几件事你需要考虑。

  1. 您需要将DB与一些应用程序逻辑混合。为什么?因为您需要跟踪显示问题的历史记录(可能是包含问题及其所选答案的列表)。

  2. 现在您已经有了已经显示的问题,您需要使用它们来分离上DB的问题和问题解决。(就像一个固定的十字路口)。为什么在你的应用逻辑中。嗯,因为您将在数据库上使用随机选择,所以您没有任何返回内容的记录。

  3. 根据要解决的问题的数量,我建议您首先获得问题集并缓存它们。然后,如果您需要持久化状态(如果有一些错误或用户断开连接),这很容易。