【问题标题】:Fetch mysql results, then randomize order of results, then display one differently from the rest获取 mysql 结果,然后随机化结果顺序,然后显示一个与其他结果不同的结果
【发布时间】:2012-07-04 06:14:37
【问题描述】:

我有一个获取 6 个结果的查询,然后我想随机化这 6 个结果,这样每当用户重新加载页面时,它们就会按顺序随机化。

在这 6 个结果中,我想在单独的框中显示一个而不是其他结果,我该怎么做?

这就是我的想法,获取结果,在数组上使用 shuffle(),然后在单独的框中我执行 echo array[0]['info'],然后其余的我执行 $i = 2; while($i <= 6); 并回显 array[$i]['info'];

你怎么看?有没有更好的办法?

我需要此功能尽可能高效,因此欢迎提供任何提示。可以单独查询吗?

【问题讨论】:

  • 是的,我获取了最新的 6 个结果,然后我将 6 个随机化以显示输出。这就是我发现并觉得我要做的事情。同意这个选择吗?stackoverflow.com/questions/5201967/…

标签: php mysql random


【解决方案1】:

您可以从 MySQL 中以随机顺序获取结果,而不是在 PHP 中对其进行随机化。

SELECT * FROM `table` ORDER BY RAND() LIMIT 6;

另见RAND()(下面的注释)

编辑:

要仅随机化最后 x 个条目,请参阅 this 答案。

【讨论】:

  • 我需要随机化最新的 6 个 mysql 条目,而不是全部。
  • 您可以更改查询以仅获取最新的 6 个
  • Limit 6 将采用最新的 6 个,而不是从所有 5,000 个条目中随机抽取?我怎样才能改变查询来做到这一点?
  • 你想要什么,6 个随机项,还是最后 6 个随机项?
  • 最后 6 个随机。所以我得到了最新的结果 6 5 4 3 2 1,然后在每个页面加载时将它们随机分配到 2 4 3 6 1 5。我觉得 RAND() 会使 mysql 查询变慢,所以它必须在 php 中完成,只需使用 php 以某种方式重新组织数组。
【解决方案2】:

你可以用这个...

select * from (select * from table order by date desc limit 6) as t order by rand();

【讨论】:

    【解决方案3】:
    shuffle( $result );
    
    foreach( $result as $key=>$value ):
        if( $key ):
           // get first item
           $firstOne = $value;
           continue;
        endif;
        // echo others
    endforeach;
    

    然后在单独的框中回显 $firstOne。

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多