2016-12-28 1 views
0

그래서 4.2과 같은 내 모델 중 하나에 어떻게 든이 쿼리 레일에 레일 3.2에서 프로젝트를 업그레이드하는 동안 := ONLY_FULL_GROUP_BY MySQL의에서

rows = ActiveRecord::Base.connection.execute("Select q.id,q.times_taken,avg(qr.correct)*100,q.difficulty,q.weight,sk.name,sa.name,sub.name,q.tag_list from 
    (select qu.id,qu.times_taken,qu.difficulty,qu.weight,group_concat(tags.name) tag_list,qu.subject_id,qu.subject_area_id 
    from questions qu left join taggings t on (qu.id = taggable_id) left join tags on (t.tag_id = tags.id) 
    where qu.id in (#{@questions_out_ids.join(',')}) and t.taggable_type='Question' group by t.taggable_id) q 
    left join subjects sub on (q.subject_id = sub.id) left join subject_areas sa on (q.subject_area_id = sa.id) 
    left join skills_subject_areas ssa on (sa.id = ssa.subject_area_id) left join skills sk on (ssa.skill_id = sk.id), 
    archived_question_results qr,attempts a where qr.question_id = q.id and a.id = qr.attempt_id and a.is_normalized = 1 
    and a.state = 'complete' group by qr.question_id order by q.id") 

이 아래로 MySQL의 오류를 생산하기 시작했습니다 :

ERROR 1055 (42000): Expression #6 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'faces_development.sk.name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by 

나는 비슷한 질문의 다른 답변을 검토 한 결과, 나는 내가 GROUP BY 절에하지만 내 쿼리가 매우 복잡하기 때문에, 옵션은 내가 해봤 너무 특정 테이블의 id 열을 포함 할 필요가 알고 별로 사용하지 못했습니다. 나는 mysql2 0.3.0 제안을 사용하고 있습니까?

+0

가능한 중복 [? MySQL의 5.6에 대한 어떠한 \ _value 능력이 있는가] (http://stackoverflow.com/questions/37089347/is-there-any-value -capability-for-mysql-5-6) – e4c5

답변

0

내 문제에 대한 해결책을 찾았습니다. 외관상으로는 select6th 표현, 즉 sk.name의 문제가 발생했습니다. 동일한 표현을 바깥 쪽 group by 절에 추가하면 나를 위해 그것을 고쳤습니다.

rows = ActiveRecord::Base.connection.execute("select q.id,q.times_taken,avg(qr.correct)*100,q.difficulty,q.weight,sk.name,sa.name,sub.name,q.tag_list from 
    (select qu.id,qu.times_taken,qu.difficulty,qu.weight,group_concat(tags.name) tag_list,qu.subject_id,qu.subject_area_id 
    from questions qu left join taggings t on (qu.id = taggable_id) left join tags on (t.tag_id = tags.id) 
    where qu.id in (#{@questions_out_ids.join(',')}) and t.taggable_type='Question' group by t.taggable_id) q 
    left join subjects sub on (q.subject_id = sub.id) left join subject_areas sa on (q.subject_area_id = sa.id) 
    left join skills_subject_areas ssa on (sa.id = ssa.subject_area_id) left join skills sk on (ssa.skill_id = sk.id), 
    archived_question_results qr,attempts a where qr.question_id = q.id and a.id = qr.attempt_id and a.is_normalized = 1 
    and a.state = 'complete' group by sk.name, qr.question_id order by q.id") 
6

config/database.yml :의

variables: 
    sql_mode: TRADITIONAL 
+0

완벽하게 일했습니다! –