Maison >base de données >tutoriel mysql >Comment compter efficacement les enregistrements d'une sous-requête Laravel avec GROUP BY ?

Comment compter efficacement les enregistrements d'une sous-requête Laravel avec GROUP BY ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-12 06:06:41949parcourir

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

Sélection de sous-requête dans le générateur de requêtes Laravel

La sélection de données à partir d'une sous-requête à l'aide du générateur de requêtes d'Eloquent ORM peut s'avérer difficile. Cet article traite d'un problème spécifique rencontré par un utilisateur qui souhaitait obtenir le nombre d'enregistrements pour une sous-requête créée à l'aide de GROUP BY.

Plongez dans les questions :

Les utilisateurs ont initialement tenté de résoudre ce problème en utilisant le code suivant :

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

Bien que cette approche semble logique, ce n'est pas la solution la plus efficace.

Solution élégante et optimisée :

La solution suggérée consiste à utiliser une combinaison de SQL brut et de fusion de liaisons :

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

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

Dans cette solution, la sous-requête est construite à l'aide d'une instance d'Eloquent Builder puis incluse dans une expression SQL brute. La méthode mergeBindings() est utilisée pour combiner les liaisons d'une sous-requête avec les liaisons de la requête principale. De cette façon, vous pouvez récupérer efficacement les données requises de la sous-requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn