Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengira Rekod dengan Cekap daripada Subkueri Laravel dengan GROUP BY?

Bagaimana untuk Mengira Rekod dengan Cekap daripada Subkueri Laravel dengan GROUP BY?

Susan Sarandon
Susan Sarandonasal
2025-01-12 06:06:41952semak imbas

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

Pemilihan subquery dalam pembina pertanyaan Laravel

Memilih data daripada subkueri menggunakan pembina pertanyaan Eloquent ORM boleh menjadi mencabar. Artikel ini menangani isu khusus yang dihadapi oleh pengguna yang ingin mendapatkan kiraan rekod untuk subkueri yang dibuat menggunakan GROUP BY.

Selami soalan:

Pengguna pada mulanya cuba menyelesaikan isu ini menggunakan kod berikut:

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

Walaupun pendekatan ini nampak logik, ia bukanlah penyelesaian yang paling berkesan.

Penyelesaian yang elegan dan dioptimumkan:

Penyelesaian yang dicadangkan melibatkan penggunaan gabungan SQL mentah dan penggabungan ikatan:

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

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

Dalam penyelesaian ini, subkueri dibina menggunakan contoh Eloquent Builder dan kemudian disertakan dalam ungkapan SQL mentah. Kaedah mergeBindings() digunakan untuk menggabungkan pengikatan subkueri dengan pengikatan pertanyaan utama. Dengan cara ini anda boleh mendapatkan semula data yang diperlukan dengan cekap daripada subquery.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Rekod dengan Cekap daripada Subkueri Laravel dengan GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn