Apabila menjalankan pertanyaan MySQL yang menggabungkan SELECT COUNT dan SELECT dengan GROUP BY, ia adalah mungkin untuk menghadapi percanggahan dalam bilangan keputusan. Sebab di sebalik ini selalunya adalah mesej ralat yang terkenal, "'field_name' tiada dalam GROUP BY".
Untuk memahami ralat, mari kita pecahkan isu:
KUMPULAN OLEH kumpulan baris bersama-sama berdasarkan nilai satu atau lebih lajur yang ditentukan. Dalam kes kami, pertanyaan dengan GROUP BY mempunyai klausa seperti nama GROUP BY. Ini bermakna hanya baris dengan nilai nama unik akan dikumpulkan.
SQL92 pada asalnya memerlukan semua lajur dalam klausa SELECT untuk turut berada dalam klausa GROUP BY. Walau bagaimanapun, SQL99 melonggarkan sekatan ini, membenarkan lajur yang bergantung pada fungsi GROUP BY lajur untuk dimasukkan ke dalam klausa SELECT.
MySQL, secara lalai, membenarkan "kumpulan separa oleh", bermakna ia membenarkan lajur dalam SELECT klausa yang tidak jelas dalam klausa GROUP BY. Walau bagaimanapun, ini boleh membawa kepada keputusan yang tidak menentukan.
Untuk menyelesaikan isu, pastikan semua lajur dalam klausa SELECT adalah sama ada sebahagian daripada klausa GROUP BY atau bergantung secara fungsi pada ia. Dalam contoh kami, jenis, bahasa dan kod perlu ditambahkan pada klausa GROUP BY:
SELECT `name`, `type`, `language`, `code` FROM `users` WHERE `verified` = '1' GROUP BY `name`, `type`, `language`, `code` ORDER BY `count` DESC LIMIT 0, 25
MySQL juga menawarkan tetapan, @ @sql_mode, yang boleh ditetapkan untuk menguatkuasakan kumpulan penuh oleh:
set @@sql_mode='ONLY_FULL_GROUP_BY';
Dengan tetapan ini, sebarang pertanyaan yang tidak mempunyai kumpulan penuh oleh akan mengakibatkan ralat.
Atas ialah kandungan terperinci Mengapa MySQL Membuang Ralat 'tidak dalam KUMPULAN OLEH'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!