簡體   English   中英

查詢在本地主機上運行,​​但不在實時服務器上

[英]Query working on localhost but not on live server

我的數據庫查詢在localhost上運行良好,但在實時服務器上顯示錯誤。 我在另一台服務器上使用相同的代碼,它工作得很好。 我正在使用Mysql(本地主機版本5.5.54-0ubuntu0.14.04.1)和實時服務器(5.7.10-0ubuntu0.16.04.1)。

這是我得到的錯誤:

發生數據庫錯誤

錯誤號:1055

SELECT列表的表達式#10不在GROUP BY子句中,並且包含未聚合的列“ 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

文件名:modules / admin / models / 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');

我將不勝感激。 謝謝

我認為這是解決this is incompatible with sql_mode=only_full_group_by的問題的關鍵。

看看這個禁用ONLY_FULL_GROUP_BY

可能是您的實時服務器上的數據庫啟用了此選項,但是本地主機上的數據庫可能已禁用。

一種快速的解決方案是在select查詢之前使用以下語句將sql_mode設置為none

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

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM