php
  • mysql
  • 2015-03-03 2 views 0 likes 
    0

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

    $singleSQL = mysql_query("SELECT * FROM questions WHERE id='$question' ORDER BY Rand()"); 
    
         while($row = mysql_fetch_array($singleSQL)){ 
          $id = $row['id']; 
          $thisQuestion = $row['question']; 
          $type = $row['type']; 
          $question_id = $row['question_id']; 
          $q = '<h2>'.$thisQuestion.'</h2>'; 
          $sql2 = mysql_query("SELECT * FROM answers WHERE question_id='$question' 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 /> 
           '; 
    
          } 
          $output = ''.$q.','.$answers.',<span id="btnSpan"><button onclick="post_answer()">Submit</button></span>'; 
          echo $output; 
          } 
    

    Эта функция Rand() в первой строке не работает на вопросы, но та же функция работает для ответов (варианты MCQs появляется случайным образом). Кроме того, когда я делаю изменения в SQL запроса в первой строке я получаю ошибку:

    Предупреждение:

    mysql_fetch_array() expects parameter 1 to be resource 
    boolean given in C:\xampp\htdocs\questions.php on line 36 
    undefined. 
    

    Я не знаю, что это не так !! Pls помогите мне вне !!

    +0

    '$ singleSQL = mysql_query ("SELECT * FROM вопросы ORDER BY RAND()");' Этого недостаточно для случайного выбора вопросов.? – arunrc

    +1

    Не используйте API 'mysql_ *'. Это устарело. Используйте «mysqli_ *» ord pdo с подготовленными инструкциями. Где вы подключаетесь к базе данных? Какая строка - строка 36? – Jens

    +1

    Поместите 'или die (mysql_error())' после 'mysql_query()', чтобы вы увидели сообщение об ошибке SQL. – Barmar

    ответ

    0

    Предложение WHERE id = '$question' в первом запросе возвращает его только одному вопросу, который соответствует этому ID, а не всем вопросам. Вам нужно удалить это.

    $singleSQL = mysql_query("SELECT * FROM questions ORDER BY Rand()"); 
    

    И внутри цикла вы используете неправильную переменную во втором запросе. Оно должно быть:

    $sql2 = mysql_query("SELECT * FROM answers WHERE question_id='$question_id' ORDER BY rand()"); 
    
    +0

    Я внес изменения в «SELECT * FROM ответы WHERE question_id = '$ question_id' ORDER BY rand()« этот запрос. Также я удалил where clause. Теперь возникают случайные вопросы, но в то время появляются 2 вопроса вместо одного. –

    +0

    Зачем ему возвращать только один вопрос? Он должен возвращать ВСЕ вопросы в случайном порядке. Если вам нужен только один вопрос, используйте LIMIT 1. Тогда вам не нужен цикл while ($ row = mysql_fetch_array()), так как есть только одна строка. – Barmar

    +0

    Я удалил цикл while, а также использовал LIMIT 1, но вопросы не поступают в случайном порядке. Я пытаюсь провести тест, когда люди, сидящие на соседних системах, не должны иметь один и тот же вопрос одновременно. Вот почему я хотел только один вопрос за раз. –

    0

    Дополнительная информация о ORDER BY RAND():

    ORDER BY RAND() отлично работает, когда вы работаете с небольшой базой данных, скажем, 1000 строк. Но когда дело доходит до большой базы данных, это вызывает проблемы с производительностью. Прочтите this article для получения дополнительной информации и альтернативное решение.

    С вашего вопроса, Бармар указывает, что именно не так с кодом.

    1. $singleSQL = mysql_query("SELECT * FROM questions WHERE id='$question' ORDER BY Rand()"); 
    

    Здесь вы производите измерения только для одной строки, которая не имеет смысла.

    2. mysql_query("SELECT * FROM answers WHERE question_id='$question' ORDER BY rand()"); 
    

    Это должно быть WHERE ID = '$ question_id' вместо WHERE ID = '$ вопрос'

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

    • Нет связанных вопросов^_^