2015-12-16 3 views
2

Мне удалось рандомизировать мою викторину, но проблема, с которой я сейчас сталкиваюсь, заключается в том, что после отображения ответа на дисплей появляется еще один вопрос. У меня также есть проблема ограничения вопроса, который будет извлечен из базы данных. Я хочу, чтобы вопрос был случайным, показываемым только один раз в викторине, и выберите только 5 вопросов из базы данных в качестве примера.PHP Query Random

$singleSql = mysql_query("SELECT * FROM questions ORDER BY RAND() LIMIT 1");  
    while ($row = mysql_fetch_array($singleSql)) 
    { 
     $id = $row['id']; 
     $thisQuestion = $row['question']; 
     $question_id = $row['question_id']; 
     $q = '<h2>'.$thisQuestion.'</h2>'; 


     $sql2 = mysql_query("SELECT * FROM answers where question_id = '$question_id' ORDER BY rand()"); 
     while($row2 = mysql_fetch_array($sql2)) 
     { 
      $answer = $row2['answer']; 
      $correct = $row2['correct'];     
      $answers .= 
      '<label style="cursor:pointer;"><input type="radio" name="rads" value="'.$correct.'">'.$answer.'</label> 
      <input type="hidden" id="qid" value="'.$id.'" name="qid"><br /><br />'; 
     } 
    } 
+1

вы должны добавить столбец статуса и и изменить его после того, как этот конкретный вопрос отвечает –

ответ

1

использование join .Но потребность в двух различных запросов

SELECT * FROM questions q join answers a 
on q.question_id=a.question_id 
ORDER BY RAND() LIMIT 1 
1

Мы должны выбрать случайные 5 строк из вопросов, которые не сохраняются в ответах.

SELECT questions.* FROM questions 
LEFT JOIN answers ON questions.id=answers.question_id 
WHERE answers.question_id IS NULL 
ORDER BY RAND() LIMIT 5; 
+0

, если я использую этот запрос, это означает, что я не должен объявлять для ответа таблицы, как я сделал в своем коде правильно? – user3286777

+0

Извините, я неправильно понял ваш первый вопрос! Код в моем ответе неверен :) Если вы хотите получить 5 случайных разных вопросов, просто используйте 'LIMIT 5' вместо' LIMIT 1' в вас $ singleSql. Таким образом, вы получаете массив из 5 гостей одновременно. – Psyhos

+0

им жаль, но после того, как я изменил LIMIT 1 до LIMIT 5, он просто увеличил число моих ответов на мою викторину. – user3286777

0

Чтобы предотвратить попадание снова, вы должны использовать NOT IN статьи и использовать переменный массив внутри, чтобы проверить его. Поместите идентификатор вопроса каждый раз в массив под циклом, а затем запустите запрос на основе условия. Как:

$ArrVar=array(); 

цикл начинается здесь

SELECT * FROM questions Where QuestionID NOT IN ($ArrVar) ORDER BY RAND() LIMIT 1" 

Присвоить вопрос идентификатор переменной массива, как:

$ArrVar[$ind] = $row['id']; 
0

вы можете сделать массив уникальных случайных идентификаторов в PHP и передать этот массив задайте вопросы, и да, присоединяясь к таблице вопросов и ответов, вы сохраните свой один запрос БД.

$arr = []; 
for($i=0;$i<5;$i++){ 
    $a = rand(min_id,max_id);   
    if(!in_array($a,$arr)){ 
     $arr[] = $a; 
    } 
} 

и ваше SQL1 утверждение было бы что-то вроде следующего ::

$ SQL1 = mysql_query ("SELECT * FROM вопросов WHERE ID IN" $ обр.);

это должно решить ваши оба вопроса, т.е. не повторять вопрос и принимая тест на 5 вопросов