MySQL 5.7.14 memperkenalkan perubahan yang mungkin menyebabkan pertanyaan sedia ada anda gagal dengan ralat "SQLSTATE[42000]: Ralat sintaks atau pelanggaran akses: 1140 Dalam pertanyaan agregat tanpa GROUP BY." Ralat ini berlaku apabila anda mengagregatkan lajur (cth., COUNT()) dalam klausa SELECT tetapi tidak memasukkan lajur tidak teragregat dalam klausa GROUP BY.
Dalam versi MySQL yang lebih awal, mengagregatkan lajur tanpa menggunakan GROUP BY dibenarkan. Walau bagaimanapun, untuk memastikan integriti data, MySQL 5.7.5 dan versi yang lebih baru menguatkuasakan mod SQL "ketat" atau "hanya_kumpulan_penuh_oleh", yang memerlukan semua lajur tidak terkumpul dimasukkan dalam klausa GROUP BY.
< h3>Pilihan Penyelesaian
Anda mempunyai dua pilihan untuk menyelesaikan isu ini:
Anda boleh mengubah suai konfigurasi MySQL kepada lalai kepada tingkah laku warisan yang membenarkan lajur tidak teragregat di luar klausa GROUP BY. Ini tidak disyorkan kerana ia bertentangan dengan amalan terbaik industri dan boleh membawa kepada keputusan yang salah.
Ubah suai pertanyaan anda untuk memasukkan lajur tidak teragregat dalam klausa GROUP BY. Contohnya:
<code class="sql">SELECT id, password, COUNT(id) AS count FROM users WHERE email = :email GROUP BY id, password LIMIT 1</code>
Perhatikan bahawa mengecualikan lajur tidak teragregat daripada klausa GROUP BY masih dibenarkan dalam MySQL 5.7.5 dan versi kemudian jika lajur tidak teragregat dihadkan kepada satu nilai. Sebagai contoh, penapis dalam klausa WHERE akan mengehadkan lajur kepada satu baris, menjadikannya selamat untuk mengecualikannya daripada klausa GROUP BY.
Atas ialah kandungan terperinci Mengapa Saya Mendapat Ralat \'Agregat Query Tanpa GROUP BY\' dalam MySQL 5.7.5 ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!