Menyelesaikan masalah KIRAAN SQL: Mendapat Kiraan Baris Individu
Pertanyaan SQL anda berkemungkinan menghasilkan jumlah kiraan baris yang salah kerana ia kehilangan klausa GROUP BY
yang penting. Contoh menunjukkan kiraan 2 untuk baris atas, menunjukkan masalah dengan pengagregatan.
Isu teras pertanyaan kompleks yang disediakan terletak dalam subkueri yang mengira kiraan Aura
:
<code class="language-sql">LEFT JOIN ( select `ID` as `AuraID`, `Status` as `AuraStatus`, count(*) as `Aura` from messages_aura ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
Subkueri ini, tanpa klausa GROUP BY
, menjumlahkan semua baris dalam messages_aura
, tanpa mengira AuraID
atau AuraStatus
. Oleh itu, ia sentiasa mengembalikan jumlah kiraan baris jadual (2 dalam kes anda).
Penyelesaiannya ialah menambah klausa GROUP BY
untuk mengumpulkan dan mengira dengan betul:
<code class="language-sql">LEFT JOIN ( select `ID` as `AuraID`, `Status` as `AuraStatus`, count(*) as `Aura` from messages_aura GROUP BY `AuraID`, `AuraStatus` ) aura ON (var.Poster = aura.AuraID AND var.ID = aura.AuraStatus)</code>
Kumpulan subkueri yang disemak ini messages_aura
baris mengikut AuraID
dan AuraStatus
, mengira Aura
dengan tepat untuk setiap kumpulan. Pembetulan ini akan menghasilkan hasil yang diharapkan—1 untuk baris bawah dan 2 untuk baris atas.
Atas ialah kandungan terperinci Mengapa Kiraan SQL Saya Mengembalikan Semua Baris Daripada Baris Individu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!