2017-09-24 137 views
1

我的數據庫查詢在本地主機上正常工作,但在現場服務器上顯示錯誤。我在另一臺服務器上使用相同的代碼,它工作得很好。我使用Mysql(本地主機版本5.5.54-0ubuntu0.14.04.1)和現場服務器(5.7.10-0ubuntu0.16.04.1)。在本地主機上查詢,但不在活動服務器上

這是我得到的錯誤:

數據庫出錯

錯誤編號:1055

表達#SELECT列表中的10是不是在GROUP BY子句中包含 nonaggregated列'imanage_asd.lut.log_text'不是 功能上依賴於GROUP BY子句中的列;這是 用的sql_mode不相容= only_full_group_by

的代碼:

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 

文件名:模塊/管理/模型/ Users_model.php

行號:84

這是我的代碼:

<?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_mode設置爲none之前,可以使用以下語句的快速解決方案。

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

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

顯然,您應該通過在一個方便的時間調整連接來更新查詢。

相關問題