簡體   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