You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用原生查询统计partner表不同type类型的记录数量

不同类型合作伙伴计数实现逻辑

你可以通过原生SQL分组聚合一次性完成统计,不需要多次循环查询,性能更优,实现代码如下:

// 一次原生查询完成所有类型分组计数
$typeStats = \DB::select("
    SELECT 
        type,
        COUNT(id) AS total
    FROM partner
    WHERE type IN ('yearly', 'monthly', 'weekly')
    GROUP BY type
");

// 按预设的类型顺序整理返回结果
$typeList = ['Yearly', 'Monthly', 'Weekly'];
$partner = [];
// 先组装查询结果为键值对方便映射
$statMap = [];
foreach ($typeStats as $stat) {
    $statMap[strtolower($stat->type)] = $stat->total;
}
// 按顺序填充计数,对应类型无数据时补0
foreach ($typeList as $typeItem) {
    $partner[] = $statMap[strtolower($typeItem)] ?? 0;
}

如果你需要和现有按年份统计的逻辑保持一致,采用循环单查的写法,对应原生查询实现如下:

$year = ['2015','2016','2017','2018','2019','2020','2021','2022'];
$user = [];
$type = ['Yearly','Monthly','Weekly'];
$partner = [];

// 原有按年份统计用户的逻辑
foreach ($year as $key => $value) {
    $user[] = User::where(\DB::raw("DATE_FORMAT(created_at, '%Y')"),$value)->count();
}

// 新增按合作伙伴类型统计的原生查询逻辑
foreach ($type as $value) {
    // 注意表内type存储值为小写,查询时统一转小写匹配避免大小写误差
    $count = \DB::selectOne(
        "SELECT COUNT(id) AS total FROM partner WHERE LOWER(type) = ?",
        [strtolower($value)]
    )->total;
    $partner[] = $count;
}

提示:优先使用单条分组聚合的写法,仅需和数据库交互1次即可拿到所有结果,相比循环3次查询的写法性能提升明显。

内容的提问来源于stack exchange,提问作者Muhammad Zamir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 00:16:04