【问题标题】:how to get last 10 and then show random 5如何获得最后 10 个然后显示随机 5
【发布时间】:2015-09-02 06:43:58
【问题描述】:

大家好,我是一名 php 开发人员,现在我遇到一个简单的问题,比如我想从我的数据库表中获取最后 10 个数据,然后随机显示其中的 5 个。

喜欢看下面的代码。

$random=rand(0,18);
mysqli_query(
    $connection,
    "SELECT something1,something2 
     FROM `table` 
     where (id !='0') 
     ORDER BY time DESC 
     LIMIT 4 OFFSET $random");

这个查询从 18 个中随机选择最后 4 个更新的字段,但我想要一个更好的解决方案

【问题讨论】:

标签: php mysql


【解决方案1】:

首先,定义“最后 10 个”;现在让我们假设按时间排序的最后十个。所以,当我以订购方式订购它们时,这实际上是第一个十个(我猜你明白了):

SELECT * FROM `table` WHERE (id != '0') ORDER BY time DESC LIMIT 10;

然后我们再选择它来随机化和限制:

SELECT * FROM (
    SELECT * FROM `table` WHERE (id != '0') ORDER BY time DESC LIMIT 10;
) A ORDER BY RAND() LIMIT 5

请记住,您的数据库非常功能强大且速度快,可将其用于任何数据处理。

【讨论】:

  • 这个查询相当于一两个查询吗??
  • 这是一个查询,使用子选择。
【解决方案2】:

不确定 Select 是否有很好的解决方案。您的样本连续取 4 行,偏移量不是真正的随机选择。您应该将您的选择限制为 10,然后通过另一个 php 代码获取 10 中的 5 行。

$rows = mysqli_query($connection,
    "SELECT something1,something2 FROM `table` where (id !='0') 
     ORDER BY time DESC LIMIT 10");

//then, get 5 random key from your array of row from the mysql select
$rand_keys = array_rand($rows, 5);

【讨论】:

    【解决方案3】:

    如果您更喜欢在 PHP 中进行随机化,可以使用 PHP 的 shuffle 和 array_slice。

    <?php
    $last_10_rows = mysqli_query($connection, "simple query to get last 10 rows");
    shuffle($last_10_rows); // randomize the array
    $random_5_rows = array_slice($last_10_rows, 0, 5); // take first 5
    ?>
    

    对于

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2019-10-20
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      相关资源
      最近更新 更多