gpt4 book ai didi

laravel - 从前 100 行中随机抽取 10 行

转载 作者:行者123 更新时间:2023-12-02 14:12:26 28 4
gpt4 key购买 nike

使用 Laravel Eloquent,如何从前 100 行中随机抽取 10 行(按日期排序)。

例如,我有这个:

$comments = Comment::orderBy('created_at', 'DESC')
->take(100)
->inRandomOrder()
->get();

如何更改此设置,以便从所选的 100 行中随机抽取 10 行?有没有办法做到这一点,这样我就不必检索 100 行?

最佳答案

1 - inRandomOrder() 非常慢,所以我不建议您使用它。

2 - take(100)->random() 解决方案将始终将 100 行放入内存,然后才会获得 10 个随机行。您提到当集合中只有 5 个项目时您会收到错误,因此请改用以下代码:

$comments = Comment::latest()->take(100)->get();
$count = $comments->count() > 9 ? 10 : $comments->count();
$random = $comments->random($count);

3 - 如果此查询在您的应用程序中经常执行,我建议您创建附加列 sort 并使用计划任务更新此列。每天或几个小时将 1 到 100 个整数设置为 sort 列的值。将这些数字应用于表中最新的 100 行,其他行设置为 0。

然后您将能够通过快速查询获取最新的 radnom 10 行:

$comments = Comment::orderBy('sort')->take(10)->get();

它看起来像复杂的解决方案,但在高负载系统上它是最好的选择之一。

关于laravel - 从前 100 行中随机抽取 10 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40777417/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com