使用 Laravel Eloquent,如何从前 100 行中随机抽取 10 行(按日期排序)。
例如,我有这个:
$comments = Comment::orderBy('created_at', 'DESC')
->take(100)
->inRandomOrder()
->get();
如何更改此设置,以便从选定的 100 行中随机抽取 10 行?有没有办法做到这一点,这样我就不必检索 100 行?
1 - inRandomOrder()
速度真的很慢,所以我不建议你使用它。
2 - take(100)->random()
解决方案总会得到100
rows 存入内存,然后才会得到 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。
然后您将能够通过快速查询获得最新的随机 10 行:
$comments = Comment::orderBy('sort')->take(10)->get();
它看起来像复杂的解决方案,但在高负载系统上它是最好的选择之一。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)