Laravel中如何用聚合函数计算总数
导读:本文共3114字符,通常情况下阅读需要10分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 假如有电子邮件订阅服务,希望显示订阅者的详情统计页面如下显示订阅者总数确认(confirmed)未经证实(unconfirmed)取消(cancelled)拒绝(bounced)20015050105出于本文的目的,假设我们有一个subscriber... ...
目录
(为您整理了一些要点),点击可以直达。
假如有电子邮件订阅服务,希望显示订阅者的详情统计页面如下显示
出于本文的目的,假设我们有一个subscribers
包含以下格式数据的数据库表:
大部分人的做法:
上面这样肯定会产生五条语句,这样做肯定是很不好。所以尝试优化一下,会使用另一个方法解决执行多条语句的问题:
上面先获取全部订阅者数据,然后再对这个结果集进行条件统计,使用集合
.模型多条数据查询返回Illuminate\Database\Eloquent\Collection
。这样的方法,只适合再数据量不大的时候使用,如果我们的应用程序有数千或数百万订阅者,处理的时间会很慢,并且会使用大量内存。
条件聚合
实际上有一种非常简单的方法可以查询计算这些总数。诀窍是将条件放在聚合函数中。下面是一个 SQL 示例:
以下是在 Laravel 中使用查询构建器编写此查询:
Boolean 列(字段)
表迁移创建 boolean 字段 , model定义属于转换 此处不用model为代码示例,可自行替换为model
如果使用boolean
当字段列,将更容易,比如要查询subscribers
表中的用户是否为拥有不同的角色权限。假设subscribers
表中有is_admin
、is_treasurer
、is_editor
、is_manager
、字段
这是因为聚合函数count
忽略null
列。与PHP中false || null
返回false
不同,在SQL(以及JavaScript)中,它返回null
。基本上,如果A
可以强制为真,则A || B
返回值A
;否则,返回B
。
这段话如果没理解,就看我下面说明:
使用laravel的boolean
列,实际数据表里字段为tinyint
,值为0(false)
与1(true)
, 比如
小明的is_admin
字段为1(true)
,count(is_admin or null)
可以看作表示为(1 or null)
,这A
为真 返回A
,最终sql为count(is_admin)
。
反之则是如is_admin
字段为0(false)
,最终sql为count(null)
,则忽略此列
Laravel中如何用聚合函数计算总数的详细内容,希望对您有所帮助,信息来源于网络。