2017-09-24 3 views
1

내 데이터베이스 쿼리가 로컬 호스트에서 제대로 작동하지만 라이브 서버에서 오류가 표시됩니다. 동일한 코드를 다른 서버에서 사용하고 있으며 정상적으로 작동합니다. MySQL (localhost 버전 5.5.54-0ubuntu0.14.04.1) 및 라이브 서버 (5.7.10-0ubuntu0.16.04.1)를 사용하고 있습니다. localhost에서 작업 중이지만 라이브 서버에서는 작동하지 않습니다.

내가지고있어 오류입니다 :

데이터베이스 오류

오류 번호 발생 : SELECT 목록의 1055

표현 # 10 GROUP BY 절에없는 및 을 포함 기능적으로 GROUP BY 절에있는 열에 의존하지 않는이 아닌 비 집합 열 'imanage_asd.lut.log_text';/모듈/관리/모델

줄 번호 Users_model.php

:

SELECT u.id, u.user, u.email, u.full_name, u.stat, 
GROUP_CONCAT(distinct(ar.role)) as roles, GROUP_CONCAT(distinct(g.title)) as group_names, 
count(lug.user_id) as login_times, MAX(lug.created_at) as last_login, lut.log_text, 
lut.created_at as log_text_date, mobile FROM users as u LEFT JOIN 
group_users as gu ON gu.user_id = u.id LEFT JOIN groups as g ON g.id = gu.group_id 
LEFT JOIN user_roles as ur ON ur.user_id = u.id LEFT JOIN access_roles as ar ON 
ar.id = ur.role_id LEFT JOIN log_user_login as lug ON lug.user_id = u.id LEFT JOIN 
log_user_texts as lut ON lut.user_id = u.id AND lut.id = (SELECT l.id FROM log_user_texts l 
WHERE u.id = l.user_id ORDER BY l.id DESC LIMIT 1) WHERE u.id > 1 GROUP BY u.id 

파일 이름 : 84

코드 ONLY_FULL_GROUP_BY = sql_mode와 호환되지 않습니다

이것은 내 코드입니다.

<?php 
$query = $this->db->select('u.id, u.user, u.email, u.full_name, u.stat, GROUP_CONCAT(distinct(ar.role)) as roles, ' 
         . 'GROUP_CONCAT(distinct(g.title)) as group_names, count(lug.user_id) as login_times, MAX(lug.created_at) as last_login, ' 
         . 'lut.log_text, lut.created_at as log_text_date, mobile') 
       ->join(static::T_GROUP_USERS . ' as gu', 'gu.user_id = u.id', 'left') 
       ->join(static::T_GROUPS . ' as g', 'g.id = gu.group_id', 'left') 
       ->join(static::T_USER_ROLES . ' as ur', 'ur.user_id = u.id', 'left') 
       ->join(static::T_ROLES . ' as ar', 'ar.id = ur.role_id', 'left') 
       ->join(static::T_LOG_USER_LOGIN . ' as lug', 'lug.user_id = u.id', 'left') 
       ->join(static::T_LOG_USER_TEXTS . ' as lut', 'lut.user_id = u.id AND ' 
         . 'lut.id = (SELECT l.id FROM log_user_texts l WHERE u.id = l.user_id ORDER BY l.id DESC LIMIT 1)', 'LEFT') 
       ->where('u.id > 1')->group_by('u.id')->get(static::T_USERS . ' as u'); 

어떤 종류의 도움을 주셔서 감사합니다. 감사합니다.

+0

첫 번째 테이블로'log_user_texts'에 가입하십시오. 이는 엔진이 기능적 종속성을 결정하는 데 도움이 될 수 있습니다. –

답변

1

나는 이것이 문제의 핵심이라고 생각합니다. this is incompatible with sql_mode=only_full_group_by.

이 부분을보세요. Disable ONLY_FULL_GROUP_BY

라이브 서버의 데이터베이스에이 옵션이 활성화되어 있지만 로컬 호스트에서 데이터베이스가 비활성화되었을 수 있습니다.

+1

ONLY_FULL_GROUP_BY 모드를 끄는 대신 쿼리를 수정하는 것이 좋습니다. –

+0

전적으로 당신에게 동의하지만이 질문은 같은 데이터베이스에서 실행되지 않는 이유를 지적합니다. –

0

select 쿼리를 사용하기 전에 다음 질문을 사용하여 sql_modenone으로 설정하십시오.

$this->db->query("SET sql_mode = ''"); 

$query = $this->db->select(... 
... 

물론, 당신은이 convinient 시간에 조인 조정하여 쿼리를 업데이트해야합니다.

관련 문제