我的数据库查询在localhost上工作正常,但在实时服务器上显示错误。我在另一台服务器上使用相同的代码,它工作得很好。我正在使用Mysql(localhost版本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
文件名: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');
我会感激任何帮助。 谢谢
答案 0 :(得分:1)
我认为这是您问题的关键this is incompatible with sql_mode=only_full_group_by
。
看看这个Disable ONLY_FULL_GROUP_BY。
可能是您的实时服务器上的数据库启用了此选项,但您的localhost可能已禁用。
答案 1 :(得分:1)
快速解决方案可能是在select
查询之前使用以下语句将sql_mode
设置为none
。
$this->db->query("SET sql_mode = ''");
$query = $this->db->select(...
...
显然,您应该通过在方便的时间调整连接来更新查询。