ホームページ > 記事 > PHPフレームワーク > Laravel が集計関数を使用して合計を計算する方法を詳しく説明した記事 (コード例付き)
この記事では、Laravel に関する関連知識をお届けします。Laravel で条件付き集計関数を使用して合計を計算する方法を主に紹介します。一緒に見てみましょう。必要な友人の役に立てば幸いです。ヘルプ。
#メール購読サービスがある場合、以下に示すように購読者の詳細な統計ページを表示したいとします。##確認済み | #未確認#キャンセル済み | ##バウンス##200 | ||
---|---|---|---|---|
10 | 5 | #この記事では、次の形式のデータを含む | subscribers | データベース テーブルがあると仮定します:
name
##小明 | adam@hotmeteor.com | |
---|---|---|
小红 | taylor@laravel.com | 未確認 |
ジョナサン@reinink.ca | キャンセル済み | |
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_admin、is_treasurer、
is_editor、is_manager
、およびフィールド <pre class="brush:php;toolbar:false">$totals = DB::table(&#39;subscribers&#39;)
->selectRaw(&#39;count(*) as total&#39;)
->selectRaw(&#39;count(is_admin or null) as admins&#39;)
->selectRaw(&#39;count(is_treasurer or null) as treasurers&#39;)
->selectRaw(&#39;count(is_editor or null) as editors&#39;)
->selectRaw(&#39;count(is_manager or null) as managers&#39;)
->first();</pre> があると仮定します。
これは、集計関数 count
が null
列を無視するためです。 false
を返す PHP の false || null
とは異なり、SQL (および JavaScript) では null
を返します。基本的に、
は、A
を true に強制できる場合は値 A
を返し、それ以外の場合は B
を返します。 この段落が理解できない場合は、以下の私の説明を読んでください:
laravel の
boolean 列を使用すると、実際のデータテーブルのフィールドは
tinyint になります。値は
0(false) と
1(true) です。たとえば、
Xiao Ming の
フィールドは
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 サイトの他の関連記事を参照してください。