从数据库中随机显示行而不重复?

时间:2016-01-11 18:06:57

标签: php mysqli

我的数据库中有5个问题。我希望它们随机显示,不重复。我尝试使用"按rand()"但重复发生了。我怎么能避免重复?以下是我到目前为止所做的代码!

     <?php
     $dbhost = 'localhost';
     $dbuser = 'root';
     $dbpass = 'mySql';
     $dbname = "papers";
     $rec_limit = 1;
     $conn = new mysqli($dbhost, $dbuser, $dbpass , $dbname);
     if(! $conn )
     {
        die('Could not connect: ' . mysql_error());
     }

     mysqli_select_db($conn,"$dbname")or die("cannot select DB");

     /* Get total number of records */
     $sql = "SELECT * FROM quest ";
     $retval = mysqli_query(  $conn,$sql );

     if(! $retval )
     {
        die('Could not get data: ' . mysql_error());
     }

     $row = mysqli_fetch_array($retval, MYSQL_NUM );
     $rec_count = $row[0];

     if( isset($_GET{'page'} ) )
     {
        $page = $_GET{'page'} + 1;
        $offset = $rec_limit * $page ;
     }
     else
     {
        $page = 0;
        $offset = 0;
     }

     $left_rec = $rec_count - ($page * $rec_limit);
     $sql1 = "SELECT distinct * "." FROM quest "."order by rand()"."LIMIT $offset, $rec_limit";

     $retval = mysqli_query(  $conn ,$sql1 );

     if(! $retval )
     {
        die('Could not get data: ' . mysql_error());

     }

     while($row = mysqli_fetch_array($retval, MYSQL_ASSOC))
     {
        echo '<div class="question-content">'.$row["id"].".".$row["question"]."<br><br>".'</div>';
        echo '<div class="question-options">';
        echo '<input type="radio" name="qn" value="option1" >'.$row["opt1"]."<br>".'</div>';
        echo '<input type="radio" name="qn" value="option2" >'.$row["opt2"]."<br>".'</div>';
        echo '<input type="radio" name="qn" value="option3" >'.$row["opt3"]."<br>".'</div>';
        echo '<input type="radio" name="qn" value="option4" >'.$row["opt4"]."<br><br>".'</div>';
        echo '</div>';
           "--------------------------------<br>";
     }

     if( $page > 0 && $page < 5)
     {
        $last = $page - 2;

       echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$page.'">'.'next'.'</a>';
     }

     else if( $page == 0 )
     {
       echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$page.'">'.'next'.'</a>'; 
} 

     else if( $left_rec < $rec_limit )
     {
        $last = $page - 2;
        echo "<a href=\"$_PHP_SELF?page=$last\">Last Record</a>";
     }

     mysqli_close($conn);
  ?>

1 个答案:

答案 0 :(得分:2)

PHP提供了一个名为shuffle的函数,它将随机化一个数组。它也分配新密钥。以下是其工作原理的示例:

$array = array(1,2,3,4,5);
shuffle($array);

当你回复$array的元素时,你将以随机(改组)的顺序获得它们。这是一个PHP独占解决方案,填充$array的方式取决于您的SQL,因此不在此问题的范围内。