2015-03-03 52 views
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()函数无法正常工作的问题,但同样的功能正在寻找答案(多选题选项随机出现)。 此外,当我在第一线做改变SQL查询我的错误:

警告:

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

我不知道什么是错的!请帮我解决.. !!

+0

'$ singleSQL =请求mysql_query( “SELECT * FROM问题ORDER BY RAND()”);' 这对于随机选择问题来说还不够吗? – arunrc 2015-03-03 06:48:33

+1

请勿使用'mysql_ *'API。这已被弃用。使用'mysqli_ *'ord pdo和准备好的语句。你在哪里连接到数据库?哪一行是第36行? – Jens 2015-03-03 06:49:35

+1

在'mysql_query()'之后放置'或者死(mysql_error())',以便看到SQL错误消息。 – Barmar 2015-03-03 06:52:26

回答

0

第一个查询中的WHERE id = '$question'子句使其仅返回与该ID匹配的单个问题,而不是所有问题。你需要删除它。

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

而在循环中,您在第二个查询中使用了错误的变量。它应该是:在ORDER BY RAND()

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

我在“SELECT * FROM answers WHERE question_id ='$ question_id'ORDER BY rand()”查询中做了更改。我也删除了where子句。现在随机问题正在出现,但是有两个问题出现,而不是一个。 – 2015-03-03 13:52:57

+0

为什么它只返回一个问题?它应该以随机顺序返回所有问题。如果您只想要一个问题,请使用LIMIT 1.然后,您不需要'while($ row = mysql_fetch_array())'循环,因为只有一行。 – Barmar 2015-03-03 15:11:43

+0

我删除了while循环,并且还使用了LIMIT 1,但问题不是以随机顺序出现的。我试图做一个测试,在坐在相邻系统上的人不应该同时有相同的问题。这就是为什么我一次只想要一个问题。 – 2015-03-05 05:48:50

0

的额外信息:

ORDER BY RAND()正常工作时,您用小的数据库的工作,比如说,1000行。但是当涉及到大型数据库时,会导致性能问题。阅读 this article了解更多信息和备用解决方案。

就你的问题而言,Barmar指出了代码的错误。

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 = '$问题'