[英]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
我認為您需要考慮一些事項。
您需要將數據庫與某些應用程序邏輯混合在一起。 為什么? 因為您需要跟蹤顯示的問題的歷史記錄(可能是包含問題及其選定答案的列表)。
現在,你有已經顯示的問題,你需要以不相交解決在DB和問題中的問題來使用它們。 (就像設置交集一樣)。 為什么在您的應用邏輯中。 好吧,因為您將在db上使用隨機選擇,所以您沒有任何記錄。
根據要解決的問題數量,我建議您首先獲取一組問題並進行緩存。 然后,如果您需要保持狀態(如果有錯誤或用戶斷開連接),那么這很容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.