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

如何计算Laravel中多个数据库表计数的总和?

解决Laravel中多张表记录数求和的问题

嘿,这问题挺常见的,我给你几个实用的解决方案,你可以根据自己的场景来选:

方法一:直接相加(简单直观)

这是最直接的写法,把四个表的计数结果直接加起来就行,代码很容易理解:

$totalRecords = DB::table('A')->count() + 
                DB::table('B')->count() + 
                DB::table('C')->count() + 
                DB::table('D')->count();

注意点:

这种方式会向数据库发送4次独立的查询请求,如果你的四张表数据量不大,或者这个统计不是高频调用,完全够用。但如果是大表或者高并发场景,可能会有性能损耗。

方法二:原生SQL一次查询(性能更优)

如果追求更好的性能,推荐用原生SQL通过UNION ALL把四张表的计数合并后再求和,这样只需要1次数据库请求:

$totalRecords = DB::selectOne("
    SELECT SUM(table_count) AS total
    FROM (
        SELECT COUNT(*) AS table_count FROM A
        UNION ALL
        SELECT COUNT(*) AS table_count FROM B
        UNION ALL
        SELECT COUNT(*) AS table_count FROM C
        UNION ALL
        SELECT COUNT(*) AS table_count FROM D
    ) AS combined_counts
")->total;

为什么用UNION ALL而不是UNION?

UNION会自动去重,而我们这里是要统计每张表的真实计数,不需要去重,UNION ALL的执行效率比UNION更高,所以更适合这个场景。

方法三:用Eloquent模型(符合ORM风格)

如果你已经为这四张表创建了对应的Eloquent模型(比如AModel、BModel等),也可以用模型的count()方法来实现:

$totalRecords = AModel::count() + 
                BModel::count() + 
                CModel::count() + 
                DModel::count();

原理和方法一完全一致,只是写法更贴合Laravel的ORM使用习惯,代码看起来更“Laravel”。

额外优化建议:缓存统计结果

如果这个总数统计不需要实时更新,或者允许一定的延迟,建议用Laravel的缓存系统来缓存结果,避免频繁查询数据库:

use Illuminate\Support\Facades\Cache;

$totalRecords = Cache::remember('total_table_records', 3600, function () {
    return DB::selectOne("
        SELECT SUM(table_count) AS total
        FROM (
            SELECT COUNT(*) AS table_count FROM A
            UNION ALL
            SELECT COUNT(*) AS table_count FROM B
            UNION ALL
            SELECT COUNT(*) AS table_count FROM C
            UNION ALL
            SELECT COUNT(*) AS table_count FROM D
        ) AS combined_counts
    ")->total;
});

上面的代码会把统计结果缓存1小时(3600秒),期间再次调用会直接返回缓存数据,大大提升性能。

内容的提问来源于stack exchange,提问作者Jahanzaib Khan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:37:31