Laravel Eloquentは日付順に並べ替え、ランク付けされたインデックス別にエントリも保存します
P粉002023326
2023-08-30 14:46:23
<p>Laravel を使用してプロジェクトを構築しており、すべての製品を含むテーブルがあります。このテーブルでは、製品が毎日追加され、ページ上のすべての製品が <code>created_at</code> で並べ替えられて表示されます。これは、Laravel Eloquent と <code>->orderBy('created_at', 'DESC')</code> を使用して簡単に行うことができます。 </p>
<p>ただし、特定の製品を特定の場所に「固定」/「固定」できるようにしたいと考えています。これを行うために、返されるクエリ コレクション内で製品に必要な番号を含む <code>rank_index</code> 列を作成しました。 </p>
<p>これは私の現在のテーブルです:</p>
<pre class="brush:php;toolbar:false;">title Rank_index created_at
素晴らしい製品 2023-01-01 10:04:00
別の製品 4 2023-01-01 10:00:00
ベビーカー 2023-01-01 10:05:00
グリーンカーペット2 2023-01-01 10:08:00
おもちゃ 2023-01-01 10:07:00</pre>
<p>次の表は、クエリで返したいコレクションを示しています。</p>
<pre class="brush:php;toolbar:false;">title Rank_index created_at
おもちゃ 2023-01-01 10:07:00
グリーンカーペット2 2023-01-01 10:08:00
ベビーカー 2023-01-01 10:05:00
別の製品 4 2023-01-01 10:00:00
素晴らしい製品 2023-01-01 10:04:00</pre>
<p>そのようなテーブルをデータベースから直接返す解決策があればいいのですが。こうすることで、コレクションを分割してスライスする必要がなくなり、リクエストが大幅に遅くなります。それ以外の場合は、PHP 関数を使用してコレクションを再配置、分割、スライスする必要があります。 </p>
<p>何かお役に立てれば幸いです。 </p>
<p>よろしくお願いします</p>
私はほぼ確実に Silver のソリューションを選択します
あなたの声明:
### 意味がありません。 2 つの結果セットを分割/スライス/結合しても、パフォーマンスに測定可能な影響を与える可能性はほとんどありません。「リクエストが遅くなる」ということは決してありません!
これはあなたのシナリオに適した SQL ソリューションですが、関係するテーブルのサイズによっては、2 つの結果セットを結合するよりもほぼ確実に遅くなります。リーリー
ここで説明されているように、1000 を超えるおもちゃがある場合、再帰的 cte はデフォルト値 cte_max_recursion_ Depth に達します。 上記のクエリの前に次のコマンドを実行すると、制限を削除できます:
リーリーまたは、
toysテーブルの「nofollow noreferrer">ROW_NUMBER() を使用して、再帰的 CTE を非再帰的 CTE に変更します。 リーリー これは再生可能な
dbfiddle です。
今年この問題に遭遇しました。クエリ内で直接並べ替えるのはより複雑です。MySQL の結果セットは固定位置で並べ替えられます複雑さを詳しく理解したい場合は、この質問を参照してください。
以前に行ったことは比較的単純で、2 つのクエリで完了しました。
これは参考になる例です
リーリー