laravel – 从前100名中随机抽取10行

使用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 – 如果您的应用程序中经常执行此查询,我建议您创建其他列排序并使用计划任务更新此列.每天或几小时将1到100个整数设置为排序列的值.将这些数字应用于表中的100个最新行,其他行设置为0.

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

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

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

点赞