Php 洗牌:同时只显示一行

Php 洗牌:同时只显示一行,php,random,shuffle,Php,Random,Shuffle,如何从DB中同时随机显示一行。一切正常,但显示所有行。谢谢 <?php $sql = "SELECT id,name FROM table "; $rows = array(); $result = $objCon->query($sql); while($row = $result->fetch_assoc()) { $rows[] = $ro

如何从DB中同时随机显示一行。一切正常,但显示所有行。谢谢

<?php                             
 $sql = "SELECT id,name  FROM table ";
 $rows = array();
 $result = $objCon->query($sql);    
  while($row = $result->fetch_assoc())
   {                      
   $rows[] = $row;
   }                                     
 shuffle($rows);  
 echo '<ol>';
 foreach($rows as $row)
   {
   echo '<li><h3>'.$row['id'].' = '.$row['name'].'</h3></li>';
   }

 echo '</ol>';                         

?>

您可以使用PHP执行此操作:

....
shuffle($rows);  
$randomRow = reset($rows);

....
但更好的方法是更改SQL查询:

$query = "SELECT id, name FROM table ORDER BY RAND() LIMIT 1;"

更改您的SQL请求:

从表ORDER BY RAND()LIMIT 1中选择id、名称


通过在sql查询中添加ORDER By RAND(),您要求MySQL对结果进行随机排序,然后限制返回的行数


示例代码是基于选择一行编写的。如果您想要更多,例如5,则需要添加一个while循环。

仅随机播放。您仍在遍历从数据库返回的所有行。。只是顺序不同。如果只需要一个,为什么要执行foreach循环?
$sql=“按RAND()限制1从表顺序中选择id、名称”如果您正在使用mysql@letris不客气,你可以为我的投票打分,为我的答案打分。:)你好谢谢你的回答。
<?php
    $sql = "
    SELECT id, name  
    FROM table
    ORDER BY RAND()
    LIMIT 1 ";
    $result = mysql_query($sql); 

    // As you are only return a single row you do you require the while()   
    $row = mysql_fetch_array($result);

    echo '<ol>';
      echo '<li><h3>'.$row['id'].' = '.$row['name'].'</h3></li>';
    echo '</ol>';
?>