2015-01-15 2 views
0

У меня есть база данных с четырьмя полями Первичный ключ QiD, вопрос, ответ, оценка. Я хочу получить один вопрос одновременно случайным образом ... но для пользователя, который принимает викторину, вопрос nos должен быть от 1 до N, где N - нет. вопросов.выбор случайной записи из mysql

, когда пользователь выбирает параметр (переключатель). Его следует сравнивать с данными поля ответа для этого вопроса, и оценка должна быть обновлена.

Несколько трюков, которые я пробовал, но не мог получить ... pl. помогите мне ..

+0

где эти несколько трюков? –

+0

что конкретно здесь вопрос? –

ответ

1

много способов сделать это, вы можете использовать функцию RAND(), но это не очень хорошо в плане выступлений:

SELECT * FROM question 
ORDER BY RAND() 
LIMIT 1 

Более быстрый метод состоит в определении случайного числа в PHP (или другой язык):

// first request 
SELECT MAX(id) FROM question 
// PHP part 
$random = rand(0, $theMaxId); 
// SQL request to get a random question 
SELECT * FROM question WHERE id = $random 

Для версии SQL, см: MySQL select 10 random rows from 600K rows fast

Edit (полный пример с PDO):

$req = $db->query('SELECT MAX(id) as nbr FROM question'); 
$rep = $req->fetch(); 
$theMaxId = $rep['nbr']; 

$random = rand(0, $theMaxId); 

// SQL request to get a random question 
$req = $db->prepare("SELECT * FROM question WHERE id = :id"); 
$req->bindParam(':id', $random, PDO::PARAM_INT); 
$req->execute(); 

$question = $req->fetch(); 
// here you are :) 
+0

Спасибо за помощь. Но это не решило мою проблему. Я пробовал вот так: $ theMaxId = "SELECT MAX (Q_id) FROM' ". $ Td."'"; $ random = rand (1, ceil ($ theMaxId)); // он всегда дает 1 в результате. $ sql = "SELECT * FROM' ". $ td." 'WHERE Q_id = $ random"; –

+0

Пожалуйста, смотрите мое обновление! – Spoke44

1

Попробуйте это в вашем MySQL Query

SELECT column FROM table 
ORDER BY RAND() 
LIMIT 1 
0

получить случайные вопросы из таблицы, используя 'заказ рандов()'

и обновить оценка:

Присвоить Qid как id для переключателя. Например: тип ввода = «радио» id = «2»

при проверке кликов с использованием ajax weather ans является правильным или нет и обновляется соответственно.

0

Сохранение вопросов в массиве.

while ($row = mysqli_fetch_array($results, MYSQL_NUM)){ $questions[] = $row[0];} 
shuffle($questions);shuffle($questions);shuffle($questions); 
$ndx = 0; 

Затем возьмите вопросы по одному.

$question= array_slice($questions, $ndx, 1); 
$ndx++; 

Вы не получите повторяющиеся вопросы.
Производительность отличная.

Линия 1: создает вопросы массива из результатов запроса (запрос исключен)
Строка 2: перемешивает вопросы 3-х массива для рандомизации.

Сформировать Вопрос HTML
(непроверенные)

echo '<div id="questionBox"><form method="POST" action="score.php" >'; 
    foreach ($question as $k=>$q){ 
    echo "<div id=\"q$k\"><fieldset><legend>$k</legend><div class=\"q\">$q[1]</div><input class=\"true\" type=\"radio\" name=\"a$q[0]\" value=\"1\" />&ensp;True</div><br><div id=\"a$question[0]\" class=\"false\"><input class=\"false\" type=\"radio\" name=\"a$q[0]\" value=\"0\" />&ensp;False</div><button onclick=\"next($k)\">Next</button></fieldset></div>\n"; 
    } 
echo '<div id="q' . $k . '"><input type="submit" name="Score" Value="Score" /></div></form></div>"; 

JS
(непроверенная)

echo <<<EOT 
<script type="text/javascript"> 
//<![CDATA[ 
var q = new Array; 
var divs = document.getElementsByTagName("div"); 
for (var div=1;div<divs.length;div++){ 
    did = divs[div].getAttribute("id"); 
    if (did == null){continue;} 
    divs[div].style.display='none; 
    q.push(div); 

} 
document.getElementById['q1'].style.display='block'; 

function next(a){ 
    q[a].style.display='none; 
    q[a+1].style.display='block; 

} 

//]]> 
</script> 
EOT; 
+0

Я не получил ваш запрос. У меня есть стол со 100 вопросами. Я должен отображать один вопрос одновременно, но без повторения. Пользователь должен ответить на все 100 вопросов. –

Смежные вопросы