如何获得最后 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的主要内容,如果未能解决你的问题,请参考以下文章