1からinRandomOrder()
は本当に遅いですので、私はそれを使用することをお勧めいたしますないでしょう。
2 - take(100)->random()
解決策は常にメモリに100
行を取得し、次に10ランダムな行を取得します。あなたはcollecitonで唯一の5項目があるときは、エラーを取得している言及したので、代わりにこのコードを使用します。
$comments = Comment::latest()->take(100)->get();
$count = $comments->count() > 9 ? 10 : $comments->count();
$random = $comments->random($count);
3 - このクエリはアプリあなたに本当に頻繁に実行されている場合は、私はあなたを推薦します追加の列sort
を作成し、この列をスケジュールされたタスクに更新します。毎日または数時間のうち、sort
列の値として1〜100の整数を設定します。それは、複雑なソリューションのように見える
$comments = Comment::orderBy('sort')->take(10)->get();
:テーブル内の100個の最新の行にこれらの数値を適用し、他の行は、その後、あなたは高速クエリで最新radnom 10行を取得することができるでしょう0
に設定します高負荷システムでは、これは最良のオプションの1つです。
[How to Ask](http://stackoverflow.com/help/how-to-ask)を読んで、今後他の人(およびあなた)に役立つ質問を書くことをお考えください。はい/いいえ質問は通常役に立ちません。 – zhon
@Zhon from op:*これを変更して100個のランダムな行を10個にする方法は?* 2番目の質問はメインではありませんでした。 – Derek
あなたは誰を助けていません。特にあなたが私の質問を読んでも気にしないなら。 –