【问题标题】:shuffle : Display only one row at the same timeshuffle : 同时只显示一行
【发布时间】:2014-05-22 15:15:13
【问题描述】:

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

<?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>';                         

?>

【问题讨论】:

  • 洗牌只会洗牌。您仍在循环从数据库返回的所有行。只是顺序不同。如果只需要一个循环,为什么还要进行 foreach 循环?
  • $sql = "SELECT id, name FROM table ORDER BY RAND() LIMIT 1"; 如果你使用 mysql

标签: php random shuffle


【解决方案1】:

更改您的 SQL 请求:

SELECT id,name FROM table ORDER BY RAND() LIMIT 1;

【讨论】:

    【解决方案2】:

    您可以使用 PHP:

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

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

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

    【讨论】:

    • @letris 欢迎您,您可以标记我的投票并标记我的答案已解决。 :)
    【解决方案3】:
    <?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>';
    ?>
    

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

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

    【讨论】:

    • 嗨。谢谢你的回答。
    猜你喜欢
    • 2018-02-10
    • 1970-01-01
    • 2015-12-04
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多