2011-07-28 59 views
1

我正在進行基於計算機的測試,並且無法從數據庫中隨機獲取問題,下一個按鈕顯示先前未顯示的問題,而上一個按鈕顯示的是之前的按鈕顯示的問題。我有這個代碼請任何人幫助我。下一個和上一個mysql數據庫記錄隨機

$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>"; 
+0

您想要顯示多少個問題?你是否將狀態保存在某個地方以將「http」請求「綁定」到會話? (請參閱http://docs.php.net/sessions) – VolkerK

+0

可變數量的問題和可變數量的要顯示的 –

回答

0

嗨,在你的代碼中,你正在檢索表中的所有行。只需在你的sql查詢中添加限制,你將得到你正在尋找的東西。

+0

不,這可能是錯誤的,where條件只檢查一個id。 – Alp

+0

如果只有一個id,則不使用rand()。它將始終返回相同的ID。 – Sumant

+0

我認爲第一個查詢是重要的。 – Alp

0

取決於您對「下一個」和「上一個」的定義。我假設它是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 
0

我覺得有你需要考慮幾件事情。

  1. 您需要將數據庫與某些應用程序邏輯混合使用。爲什麼?因爲你需要跟蹤顯示的問題的歷史(也許是一個包含問題和其選定答案的列表)。

  2. 既然您已經顯示了問題,您需要使用它們以便DISJOINT已解決的數據庫和問題的問題。 (就像一個集合的交叉口)。爲什麼在你的App邏輯中。那麼,因爲你將隨機選擇分貝,所以你沒有任何記錄返回。

  3. 根據問題的數量來解決我建議你首先得到一組問題並緩存它們。然後,如果你需要堅持狀態(如果有一些錯誤或用戶斷開連接),它很容易。

相關問題