Laravel が集計関数を使用して合計を計算する方法を詳しく説明した記事 (コード例付き)

藏色散人
リリース: 2023-01-20 16:11:48
転載
1304 人が閲覧しました

この記事では、Laravel に関する関連知識をお届けします。Laravel で条件付き集計関数を使用して合計を計算する方法を主に紹介します。一緒に見てみましょう。必要な友人の役に立てば幸いです。ヘルプ。

Laravel が集計関数を使用して合計を計算する方法を詳しく説明した記事 (コード例付き)

#メール購読サービスがある場合、以下に示すように購読者の詳細な統計ページを表示したいとします。

## 購読者数の合計#未確認##バウンス15050#この記事では、次の形式のデータを含む データベース テーブルがあると仮定します:
##確認済み#キャンセル済み ##200
10 5 subscribers

name

メール
ステータス確認済み##小ジュンジョナサン@reinink.caキャンセル済み##小花
$total = Subscriber::count();
$confirmed = Subscriber::where('status', 'confirmed')->count();
$unconfirmed = Subscriber::where('status', 'unconfirmed')->count();
$cancelled = Subscriber::where('status', 'cancelled')->count();
$bounced = Subscriber::where('status', 'bounced')->count();
ログイン後にコピー
$subscribers = Subscriber::all();
$total = $subscribers->count();
$confirmed = $subscribers->where('status', 'confirmed')->count();
$unconfirmed = $subscribers->where('status', 'unconfirmed')->count();
$cancelled = $subscribers->where('status', 'cancelled')->count();
$bounced = $subscribers->where('status', 'bounced')->count();
ログイン後にコピー
. 複数のデータ クエリをモデル化すると、Illuminate\Database\Eloquent\Collection が返されます。
##小明 adam@hotmeteor.com
小红 taylor@laravel.com 未確認
adam.wathan@gmail.com bounced
ほとんどの人が行うこと: 上記のコードでは間違いなく 5 つのステートメントが生成されますが、これは明らかに良くありません。したがって、最適化しようとする場合は、別の方法を使用して複数のステートメントを実行する問題を解決することになります。 上記のコードでは、最初にすべてのサブスクライバ データを取得し、次に ## を使用して、この結果セットに対して条件付き統計を実行します。 #Collection
この方法は、データ量が大きくない場合の使用にのみ適しています。アプリケーションに数千または数百万のサブスクライバがある場合、処理時間が非常に遅くなり、大量のメモリが使用されます。

条件付き集計

実は、これらの合計をクエリして計算する非常に簡単な方法があります。コツは、条件を集計関数に入れることです。 SQL の例は次のとおりです:

select
  count(*) as total,
  count(case when status = 'confirmed' then 1 end) as confirmed,
  count(case when status = 'unconfirmed' then 1 end) as unconfirmed,
  count(case when status = 'cancelled' then 1 end) as cancelled,
  count(case when status = 'bounced' then 1 end) as bounced
from subscribers

 total | confirmed | unconfirmed | cancelled | bounced
-------+-----------+-------------+-----------+---------
   200 |       150 |          50 |        30 |      25

————————————————
原文作者:4pmzzzzzzzzzz
转自链接:https://learnku.com/articles/74652
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。
ログイン後にコピー
クエリ ビルダーを使用して Laravel でこのクエリを作成する方法は次のとおりです:
$totals = DB::table('subscribers')
    ->selectRaw('count(*) as total')
    ->selectRaw("count(case when status = 'confirmed' then 1 end) as confirmed")
    ->selectRaw("count(case when status = 'unconfirmed' then 1 end) as unconfirmed")
    ->selectRaw("count(case when status = 'cancelled' then 1 end) as cancelled")
    ->selectRaw("count(case when status = 'bounced' then 1 end) as bounced")
    ->first();

<div>Total: {{ $totals->total }}</div>
<div>Confirmed: {{ $totals->confirmed }}</div>
<div>Unconfirmed: {{ $totals->unconfirmed }}</div>
<div>Cancelled: {{ $totals->cancelled }}</div>
<div>Bounced: {{ $totals->bounced }}</div>
ログイン後にコピー
ブール列 (フィールド)

# # テーブルの移行により boolean フィールドが作成され、

モデル定義は変換に属します

モデルはここではコード例として使用されていません。モデル

を使用する場合はモデルに置き換えることができます。

boolean

フィールドがリストされると、たとえば、subscribers テーブル内のユーザーが異なるロール権限を持っているかどうかをクエリするのが簡単になります。

subscribers

テーブルに is_adminis_treasurer

is_editor

is_manager、およびフィールド <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$totals = DB::table(&amp;#39;subscribers&amp;#39;) -&gt;selectRaw(&amp;#39;count(*) as total&amp;#39;) -&gt;selectRaw(&amp;#39;count(is_admin or null) as admins&amp;#39;) -&gt;selectRaw(&amp;#39;count(is_treasurer or null) as treasurers&amp;#39;) -&gt;selectRaw(&amp;#39;count(is_editor or null) as editors&amp;#39;) -&gt;selectRaw(&amp;#39;count(is_manager or null) as managers&amp;#39;) -&gt;first();</pre><div class="contentsignin">ログイン後にコピー</div></div> があると仮定します。 これは、集計関数 countnull 列を無視するためです。 false を返す PHP の false || null とは異なり、SQL (および JavaScript) では null を返します。基本的に、

A || B

は、A を true に強制できる場合は値 A を返し、それ以外の場合は B を返します。 この段落が理解できない場合は、以下の私の説明を読んでください: laravel の boolean 列を使用すると、実際のデータテーブルのフィールドは tinyint になります。値は 0(false)1(true) です。たとえば、Xiao Ming の

is_admin

フィールドは
1(true) ),count(is_admin or null)(1 or null) で表現されたものとみなされ、A が true の場合は を返します。 A
、最後の SQL は count(is_admin) です。 逆に、is_admin フィールドが 0(false) で、最後の SQL が count(null) の場合、この列は次のようになります。無視されました

//PHP  返回 false
var_dump(0 || null) 

//JavaScript 返回 null
console.log(0 || null)

//SQL 返回 null
SELECT (0 or null) as result
ログイン後にコピー
原文の翻訳: この記事は一般的な意味を翻訳したものであり、自分用の簡単な記録として使用されます
推奨研究: " laravel ビデオチュートリアル "

以上がLaravel が集計関数を使用して合計を計算する方法を詳しく説明した記事 (コード例付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:learnku.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のおすすめ
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート