Laravel Eloquentは日付順に並べ替え、ランク付けされたインデックス別にエントリも保存します
P粉002023326
P粉002023326 2023-08-30 14:46:23
0
2
364

Laravel を使用してプロジェクトを構築しており、すべての製品を含むテーブルがあります。このテーブルでは、製品が毎日追加され、ページ上のすべての製品が created_at で並べ替えられて表示されます。これは、Laravel Eloquent と ->orderBy('created_at', 'DESC') を使用して簡単に行うことができます。

ただし、特定の製品を特定の場所に「固定」/「固定」できるようにしたいと考えています。これを行うために、返されるクエリ コレクション内で製品に必要な番号を含む rank_index 列を作成しました。

これは私の現在のテーブルです:

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

次の表は、クエリで返したいコレクションを示しています。

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

そのようなテーブルをデータベースから直接返す解決策があればいいのですが。こうすることで、コレクションを分割してスライスする必要がなくなり、リクエストが大幅に遅くなります。それ以外の場合は、PHP 関数を使用してコレクションを再配置、分割、スライスする必要があります。

何かお役に立てれば幸いです。

よろしくお願いします

P粉002023326
P粉002023326

全員に返信 (2)
P粉662802882

私はほぼ確実に Silver のソリューションを選択します

あなたの声明:

### 意味がありません。 2 つの結果セットを分割/スライス/結合しても、パフォーマンスに測定可能な影響を与える可能性はほとんどありません。

「リクエストが遅くなる」ということは決してありません!

これはあなたのシナリオに適した SQL ソリューションですが、関係するテーブルのサイズによっては、2 つの結果セットを結合するよりもほぼ確実に遅くなります。

リーリー

ここで説明されているように、

1000 を超えるおもちゃがある場合、再帰的 cte はデフォルト値cte_max_recursion_ Depthに達します。上記のクエリの前に次のコマンドを実行すると、制限を削除できます:

リーリー

または、

toys

テーブルの「nofollow noreferrer">ROW_NUMBER()を使用して、再帰的 CTEを非再帰的 CTE に変更します。 リーリーこれは再生可能な

db

fiddleです。

いいねを押す+0
    P粉571233520

    今年この問題に遭遇しました。クエリ内で直接並べ替えるのはより複雑です。MySQL の結果セットは固定位置で並べ替えられます複雑さを詳しく理解したい場合は、この質問を参照してください。

    以前に行ったことは比較的単純で、2 つのクエリで完了しました。

    • 最初の方法は、現在のページング範囲内の固定アイテムをクエリすることです。
    • 2 番目のクエリは、日付で並べ替えられた標準のページング クエリです。
    • 次に、固定項目をページ分割されたクエリにプッシュし、その列の値に基づいてインデックスを使用します。

    これは参考になる例です

    リーリー
    いいねを押す+0
      最新のダウンロード
      詳細>
      ウェブエフェクト
      公式サイト
      サイト素材
      フロントエンドテンプレート
      私たちについて 免責事項 Sitemap
      PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!