mod mysql 5.7 : Penyelesaian masalah dan penyelesaian only_full_group_by
. Ini berlaku apabila pernyataan only_full_group_by
termasuk lajur yang tidak diagihkan tidak termasuk dalam klausa SELECT
. Daripada melumpuhkan ciri penting ini (yang sangat tidak digalakkan), mari kita meneroka penyelesaian yang berkesan: GROUP BY
Masalah:
Pertanyaan yang berfungsi dengan betul dalam versi MySQL yang lebih lama mungkin gagal dalam 5.7, menghasilkan ralat yang menunjukkan lajur yang tidak diagihkan dalam senarai tidak bergantung pada lajur SELECT
. GROUP BY
Penyelesaian yang disyorkan:
Sertakan lajur yang tidak diagihkan dalam : GROUP BY
Penyelesaian yang paling mudah sering menambah mana-mana lajur yang tidak diagihkan dari senarai ke klausa SELECT
. Ini memastikan setiap kumpulan secara unik mentakrifkan nilai -nilai lajur tersebut. Contohnya: GROUP BY
<code class="language-sql">GROUP BY group_name, group_id</code>
Jika anda memerlukan lajur yang tidak diagihkan dalam hasil anda tetapi masih memerlukan pengelompokan, gunakan fungsi agregat (seperti , , MIN()
, MAX()
, AVG()
) pada lajur tersebut. Ini memastikan satu hasil setiap kumpulan. Contoh: SUM()
COUNT()
<code class="language-sql">SELECT group_id AS 'value', group_name AS 'text', COUNT(*) AS 'count' FROM mod_users_groups LEFT JOIN mod_users_data ON group_id = mod_users_data.group_id WHERE ... GROUP BY group_name, group_id</code>
Sentiasa memenuhi syarat lajur dengan nama meja atau alias mereka, terutamanya dalam pertanyaan yang melibatkan gabungan. Ini menjelaskan jadual mana setiap lajur milik dan menghalang kekaburan.
<code class="language-sql">SELECT g.group_id AS 'value', g.group_name AS 'text' FROM mod_users_groups g LEFT JOIN mod_users_data d ON g.group_id = d.group_id WHERE ... GROUP BY g.group_name, g.group_id HAVING COUNT(d.user_id) > 0 ORDER BY g.group_name</code>
; Ini adalah ciri kritikal untuk mencegah hasil pertanyaan yang tidak dijangka dan berpotensi tidak betul. only_full_group_by
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan ralat `only_full_group_by` MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!