首页 >数据库 >mysql教程 >如何使用 GROUP BY 高效计算 Laravel 子查询中的记录数?

如何使用 GROUP BY 高效计算 Laravel 子查询中的记录数?

Susan Sarandon
Susan Sarandon原创
2025-01-12 06:06:41949浏览

How to Efficiently Count Records from a Laravel Subquery with GROUP BY?

Laravel 查询构造器中的子查询选择

使用 Eloquent ORM 的查询构造器从子查询中选择数据可能具有挑战性。本文解决了一个用户面临的特定问题,该用户希望获得使用 GROUP BY 创建的子查询的记录计数。

深入探讨问题:

用户最初尝试使用以下代码解决此问题:

<code class="language-php">$sql = Abc::from('abc AS a')
    ->groupBy('col1')
    ->toSql();
$num = Abc::from(DB::raw($sql))
    ->count();
print $num;</code>

虽然这种方法看起来合乎逻辑,但它不是最有效的解决方案。

优雅且优化的解决方案:

建议的解决方案涉及使用原始 SQL 和绑定合并的组合:

<code class="language-php">$sub = Abc::where(..)
    ->groupBy(..); // Eloquent Builder 实例

$count = DB::table(DB::raw("({$sub->toSql()}) as sub"))
    ->mergeBindings($sub->getQuery()) // 以正确的顺序合并绑定
    ->count();</code>

在此解决方案中,子查询使用 Eloquent Builder 实例构建,然后包含在原始 SQL 表达式中。mergeBindings() 方法用于将子查询的绑定与主查询的绑定组合在一起。通过这种方法,您可以高效地从子查询中检索所需数据。

以上是如何使用 GROUP BY 高效计算 Laravel 子查询中的记录数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn