2016-04-30 19 views
11

i 16.04 ile 15.10 benim ubuntu yükseltilmiş aldığımda benim yii2 projede bu Erro varsqlstate [42000]: sözdizimi hatası veya erişim ihlali: SEÇ listenin 1055 İfade 3. GROUP BY deyiminde değildir ve içerdiği nonaggregated

SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #3 
of SELECT list is not in GROUP BY clause and contains nonaggregated column 
'iicityYii.opportunity_conditions.money' which is not functionally dependent 
on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 

SQL yürütülmektedir oldu:

SELECT SUM(oc.money),op.id,oc.money, 
      op.mantaghe, 
      op.`time`, op.`id`, `op`.`logo`, 
      `pd`.`user_id`, `op`.`name`, 
      `pd`.`co_name`, `op`.`address`, 
      `op`.`project_type_id`, `op`.`state_id` 
FROM `opportunity` op 
INNER JOIN `profile_details` pd ON op.user_id=pd.user_id 
INNER JOIN `opportunity_conditions` oc ON op.id=oc.opportunity_id 
GROUP BY `op`.`id` 
ORDER BY `op`.`id` DESC 

nasıl benim sorunu çözmek için?

cevap

3

Bir toplama işlevi toplamı ve bir sütun adı kümesi seçtiyseniz, hata, grup sonuna göre doğru bir sütun adı listesi belirtmediğinizi belirtir. muhtemelen profile_details, opportunity_conditions masanın

Eğer özetlemek gerekirse () tüm sütuna

sum(opportunity.id), sum(opportunity_conditions.money), 

toplamı (fırsat için toplamı eklemelisiniz neden Ayrıca ,(opportunity.id),(opportunity_conditions.money), (opportunity.mantaghe), sahip ilişkin gruptaki daha fazla sütun adını eklemek gerekir olabilir. mantaghe),

thes Normal sütunlardır aksi takdirde sen olmadan normal bir SINTAX()

opportunity.id, opportunity_conditions.money,opportunity.mantaghe,

kullanmalıdır

Ben esansiyel sütun adı üzerinde (umarım) tarafından olası bir sorgu

GROUP BY`opportunity`.`id`, `profile_details`.`user_id`,`opportunity_conditions.money`, 
23

grupla

SELECT SUM(opportunity_conditions.money), 
     `opportunity`.`id`, 
     `opportunity_conditions.money`, 
     `opportunity.mantaghe`, 
     `opportunity`.`time`, 
     `opportunity`.`logo`, 
     `profile_details`.`user_id`, 
     `opportunity`.`name`, 
     `profile_details`.`co_name`, 
     `opportunity`.`address`, 
     `opportunity`.`project_type_id`, 
     `opportunity`.`state_id` 
FROM `opportunity` 
INNER JOIN `profile_details` ON `opportunity`.`user_id`= `profile_details`.`user_id` 7 
INNER JOIN `opportunity_conditions` ON `opportunity`.`id`=`opportunity_conditions`.`opportunity_id` 
GROUP BY`opportunity`.`id`, `profile_details`.`user_id`,`opportunity_conditions.money`, 
ORDER BY `opportunity`.`id` DESC 

yeniden VEYA Hemen

$ sudo mysql -u Run çalıştık kök -p

değişiklik MySQL sunucu örneği

için SQL Modu
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY','')); 

başka yolu deyimi sql_mode eklemek [mysqld] ve hemen altında için

  • bir bölüm eklemek mysql yapılandırmaları

    /etc/mysql/my.cnf için gitmek kullanarak olurdu = ""
  • MySQL servisi $ sudo systemctl yeniden başlatma MySQL
+0

benim için çalıştı, teşekkürler. – Stephen

+0

Benim için de çalıştı. Teşekkürler – manian

+0

Geri alma nasıl yapılır? – abenevaut

0

T yeniden hx, bu bana yardımcı oldu, ancak bu PERMANENTLY ayarlamaz ve her yeniden başlatıldıktan sonra geri dönecektir.

Yapılandırma Dosyası: değişiklikler MySQL yeniden başlatıldıktan sonra etkin kalır, böylece

Yani, ([mysqld] bölümüne örn /etc/mysql/my.cnf) config dosyanızda bu belirlesin: /etc/mysql/my.cnf

[mysqld] 
sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" 
İlgili konular