最近のMySQLだと発生するエラー。
An uncaught Exception was encountered
Type: mysqli_sql_exception
Message: Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.table.column' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
公式リファレンスによると、
GROUP BY 句で名前が指定されていない非集約カラムを、選択リスト、HAVING 条件、または (MySQL 5.6.5 以降で) ORDER リストが参照するクエリーを拒否します。
ONLY_FULL_GROUP_BY が有効な場合、次のクエリーは無効です。1 番目は、選択リスト内の非集約の address カラムが GROUP BY 句で名前を指定されておらず、2 番目は、HAVING 句の max_age が GROUP BY 句で名前を指定されていないため、ともに無効になります。
要はONLY_FULL_GROUP_BYが有効なため、group byの条件が厳しくなってるみたい。
これを設定で無効にしてしまう。
現在の設定確認
下記のクエリをMySQLで実行すれば、現在の設定が確認できる。
SELECT @@global.sql_mode;
結果にONLY_FULL_GROUP_BYが含まれていたら、制約が有効になってしまっている。
MySQLで直接実行する
このクエリを使えば、ONLY_FULL_GROUP_BYは無効になり、そして再起動しても設定はずっと有効になる。
my.cnfの場所を探さなくてもいいので楽。
SET PERSIST sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
参考URL: https://stackoverflow.com/questions/23921117/disable-only-full-group-by