Ubuntu üzerine lamp kurduktan sonra sorunsuz bir bir şekilde php ve mysql ile birlikte uygulamalar geliştiriyordum. ta ki bir uygulamam da group by kullanana kadar.
group by kullandığımda bana aşağıdakine benzer bir hata döndürmüş idi
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘returntr_prod.tbl_customer_pod_uploads.id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
hemen bu sorunu nette aradım. karşıma birkaç çözüm önerisi gelsede aslında 3 çözüm vardı.
bunlardan birincisi
SELECT @@sql_mode;
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”));
SET sql_mode = ‘STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION’
veya
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,’ONLY_FULL_GROUP_BY’,”));
bu sql kodlarını phpmyadmin de sql kodu olarak çalıştırmak.
ikincisi ise
phpmyadmin üzerinde aşağıdaki ayarların değiştirilmesi idi
variables(değişkenler) seçeneği altında bulunan sql mod(sql mode) bölümünü edit (Düzenle) diyerek açılan kutuda ONLY_FULL_GROUP_BY ifadesini kaldırın.
Buraya kadar uyguladıklarım sorunu geçici olarak hep çözdü. fakat bilgisayarı yeniden başlattıktan sonra hep aynı işlemleri tekrardan uygulamak zorunda kalıyorsunuz.
Kalıcı çözüm olarak ise
CTRL+ALT+T ile terminali açtıktan sonra
sudo gedit /etc/mysql/my.cnf
komutunu vermeniz ve onaylamanız.
bu onaydan sonra sistem sizden root şifrenizi isteyecektir. root şifrenizi yazdıktan sonra açılan belgenin en altına
[mysqld]
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
kodlarını ekleyip belgeyi kaydedip çıkın.
ve daha sonra
sudo service mysql restart
komutunu kullanarak mysql’ i yeniden başlatın.
artık bundan sonra bilgisayarı kapatsanız dahi group by hatası ile karşılaşmayacaksınız.
kaynak https://stackoverflow.com/