ホームページ > 記事 > PHPフレームワーク > Laravelグループクエリの最初の数レコード
Laravel では、製品カテゴリの下で売上トップ 5 の製品をクエリするなど、データベースの最初の数レコードをクエリする必要があることがよくあります。この場合、通常はグループ化クエリを使用してこれを実現します。
この記事では、Laravel でグループクエリを実行し、各グループの最初の数レコードをクエリする方法を紹介します。
まず、製品情報を保存するデータ テーブルを用意する必要があります。 「product」というデータテーブルを作成し、そこにデータを挿入したとします。
Laravel のクエリ ビルダーを使用してクエリ ステートメントを作成できます。まず、製品をカテゴリ別にグループ化し、各グループの上位 5 つの製品をクエリする必要があります。クエリ ステートメントは次のとおりです。
$products = DB::table('products') ->select('category', DB::raw('MAX(sales) as max_sales')) ->groupBy('category') ->orderByDesc('max_sales') ->limit(5) ->get();
ここでは、select() メソッドを使用してクエリ対象のフィールドを指定し、DB::raw() メソッドを使用して各グループの最大売上高を計算します。 groupBy() メソッドは分類フィールドによるグループ化を指定し、orderByDesc() メソッドは最大売上高で降順に並べ替え、limit() メソッドはクエリされるレコードの数を 5 に制限します。最後に、get() メソッドを使用してクエリを実行し、カテゴリをキー、最大販売数量を値として持つ結果セットを返します。
次に、クエリ結果を処理して、各グループの上位 5 つの製品を取得する必要があります。結果セットをループで処理し、各グループの最初の 5 つの項目をクエリして、それらを新しい配列に追加できます。
$result = []; foreach ($products as $product) { $query = DB::table('products') ->select('*') ->where('category', $product->category) ->orderByDesc('sales') ->limit(5) ->get(); $result[$product->category] = $query; }
ループ内では、まず各カテゴリのすべての製品をクエリし、次に売上高で降順に並べ替え、クエリ レコードの数を 5 に制限し、最後にクエリ結果を新しい配列に追加します。ループが終了すると、カテゴリをキー、クエリ結果を値とする新しい配列が取得されます。この配列には、各カテゴリの売上上位 5 つの製品が含まれています。
最後に、新しい配列を走査して、クエリ結果をページに出力できます。
foreach ($result as $category => $products) { echo '<h3>'.$category.'</h3>'; echo '<ul>'; foreach ($products as $product) { echo '<li>' . $product->name . '</li>'; } echo '</ul>'; }
結果を出力する際は、まずカテゴリ名を出力し、次にulリストの各商品名を出力します。
この記事では、Laravel でグループクエリを使用して各グループの最初の数レコードをクエリする方法を紹介しました。 select()、groupBy()、orderByDesc()、limit() などのメソッドを使用することで、クエリ ステートメントを柔軟に記述して、さまざまな複雑なクエリ要件を実現できます。同時に、Laravel のクエリ ビルダーを使用してデータベース クエリ ステートメントを作成し、クエリ結果を処理して出力する方法も学びました。
以上がLaravelグループクエリの最初の数レコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。