如何获得最后 10 个然后显示随机 5

Posted

技术标签:

【中文标题】如何获得最后 10 个然后显示随机 5【英文标题】:how to get last 10 and then show random 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 个更新的字段,但我想要一个更好的解决方案

【问题讨论】:

只在查询中按RAND() 排序而不是在PHP 中执行? 这和你的问题不一样吗? ***.com/questions/9945691/… 【参考方案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
?>

对于

【讨论】:

以上是关于如何获得最后 10 个然后显示随机 5的主要内容,如果未能解决你的问题,请参考以下文章

python如何随机显示动漫背景

PPT随机抽题

JAVA06数组之动手动脑问题解决

如何从字符串数组中获取随机字符串 [重复]

如何生成三个随机数之和为1?

显示随机选择(Python)