繁体   English   中英

下一个和上一个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查询中放入limit,您就会得到您想要的东西。

取决于您对“下一个”和“上一个”的定义。 我认为这是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. 您需要将数据库与某些应用程序逻辑混合在一起。 为什么? 因为您需要跟踪显示的问题的历史记录(可能是包含问题及其选定答案的列表)。

  2. 现在,你有已经显示的问题,你需要以不相交解决在DB和问题中的问题来使用它们。 (就像设置交集一样)。 为什么在您的应用逻辑中。 好吧,因为您将在db上使用随机选择,所以您没有任何记录。

  3. 根据要解决的问题数量,我建议您首先获取一组问题并进行缓存。 然后,如果您需要保持状态(如果有错误或用户断开连接),那么这很容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM