Следующая и предыдущая записи базы данных MySQL случайно - PullRequest
1 голос
/ 28 июля 2011

Я работаю над компьютерным тестом и не могу получить вопрос из базы данных случайным образом: следующая кнопка отображает вопрос, который ранее не отображался ранее, а предыдущая кнопка отображает ранее отображенный вопрос.У меня есть этот код, пожалуйста, кто-нибудь может мне помочь.

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

Ответы [ 3 ]

0 голосов
/ 28 июля 2011

Зависит от вашего определения «следующий» и «предыдущий».Я предполагаю, что это порядка 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 голосов
/ 28 июля 2011

Я думаю, есть несколько вещей, которые вы должны рассмотреть.

  1. Вам необходимо смешать БД с некоторой логикой приложения. Зачем? Потому что вам нужно отслеживать историю отображаемых вопросов (возможно, список, содержащий вопрос и выбранный ответ).

  2. Теперь, когда у вас есть уже отображенные вопросы, вам нужно использовать их, чтобы DISJOINT Вопросы по БД и Решенные вопросы. (Прямо как пересечение множества). Почему в вашем приложении логика. Ну, потому что вы будете работать со случайным выбором на БД, поэтому у вас нет записи о том, что было возвращено.

  3. В зависимости от количества вопросов, которые нужно решить, я бы посоветовал вам сначала получить набор вопросов и кэшировать их. Затем, если вам нужно сохранить состояние (если есть какая-то ошибка или пользователь отключен), это просто.

0 голосов
/ 28 июля 2011

Привет, в вашем коде вы извлекаете все строки из таблицы. просто поставьте ограничение в вашем sql запросе, и вы получите то, что ищете.

...