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
Lepaskan: 2025-01-12 06:06:41
asal
951 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan