发生数据库错误错误号:1055
A Database Error Occurred Error Number: 1055
将数据库从 MySQL 更改为 MySQLI 并收到错误 - 发生数据库错误
错误编号:1055
Expression #23 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'zipbizzlatestdb.pia.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECT *,o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `pr_opportunity` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id
文件名:/var/www/html/singlecodebase/Feb152017/models/mod_common.php
行号:6999
我的模型文件mod_common如下:
function get_opportunity_list()
{
$sql = "SELECT *,o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `".$this->myTables['opportunity']."` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id";
$query=$this->db->query($sql);
if($query->num_rows() > 0){
$rows = $query->result();
}
return $rows;
}
不知道如何解决这个错误
它发生在 mysql 5.7
所以检查这个 link [https://www.sitepoint.com/quick-tip-how-to-permanently-change-sql-mode-in-mysql/] 并按照对我来说很好的步骤进行操作。
或者
打开文件
vi /etc/mysql/my.cnf
在文件底部添加这些行
[mysqld]
# ... other stuff will probably be here
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
并保存
然后重启 mysql
sudo service mysql restart
Note not for window os
在阅读您的 SQL 时,您要求 return 每一列(即 *),以及 id 第二次(o.id 已被 * 检索) ,那么您正在查询 GROUP_CONCAT(pia.applicantid) 的聚合函数。但是,您的 group by 子句仅请求聚合依据(group by)o.id。
SQL 不喜欢这样,因为它不知道如何处理您使用 * 查询的数据集中的其他字段。
我怀疑您想以聚合方式查看与 o.id 相关的每个申请人 ID。如果是这样,这就是您的查询,它将起作用。
SELECT o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `".$this->myTables['opportunity']."` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id"
如果您想按其他字段分组,只需将它们专门添加到您的 select 以及您的分组依据中。所有非聚合字段都需要在 select 和分组依据中。这是 ANSI Standard 的一部分,应该适用于所有 SQL 风格。我相信 mysql 5.7 及更高版本比以前的版本更多地关注这一点,但我通常会遵循这一点。
这里有一些关于该主题的补充阅读材料。希望这可以帮助。
MySQL 5.7 Documentation regarding Group by
这对我有用:
打开 http://localhost/phpmyadmin/ 然后单击 SQL 和 运行 此查询:
SET sql_mode = '';
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
将数据库从 MySQL 更改为 MySQLI 并收到错误 - 发生数据库错误
错误编号:1055
Expression #23 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'zipbizzlatestdb.pia.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SELECT *,o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `pr_opportunity` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id
文件名:/var/www/html/singlecodebase/Feb152017/models/mod_common.php
行号:6999
我的模型文件mod_common如下:
function get_opportunity_list()
{
$sql = "SELECT *,o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `".$this->myTables['opportunity']."` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id";
$query=$this->db->query($sql);
if($query->num_rows() > 0){
$rows = $query->result();
}
return $rows;
}
不知道如何解决这个错误
它发生在 mysql 5.7
所以检查这个 link [https://www.sitepoint.com/quick-tip-how-to-permanently-change-sql-mode-in-mysql/] 并按照对我来说很好的步骤进行操作。
或者 打开文件
vi /etc/mysql/my.cnf
在文件底部添加这些行
[mysqld]
# ... other stuff will probably be here
sql_mode = "STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
并保存 然后重启 mysql
sudo service mysql restart
Note not for window os
在阅读您的 SQL 时,您要求 return 每一列(即 *),以及 id 第二次(o.id 已被 * 检索) ,那么您正在查询 GROUP_CONCAT(pia.applicantid) 的聚合函数。但是,您的 group by 子句仅请求聚合依据(group by)o.id。
SQL 不喜欢这样,因为它不知道如何处理您使用 * 查询的数据集中的其他字段。
我怀疑您想以聚合方式查看与 o.id 相关的每个申请人 ID。如果是这样,这就是您的查询,它将起作用。
SELECT o.id as id, GROUP_CONCAT(pia.applicantid) as applicants
FROM `".$this->myTables['opportunity']."` as o
LEFT OUTER JOIN pr_internal_applicant as pia
ON o.id = pia.positionid
WHERE o.approval_status='Approved'
and DATE(o.deadline) > DATE(NOW())
GROUP BY o.id"
如果您想按其他字段分组,只需将它们专门添加到您的 select 以及您的分组依据中。所有非聚合字段都需要在 select 和分组依据中。这是 ANSI Standard 的一部分,应该适用于所有 SQL 风格。我相信 mysql 5.7 及更高版本比以前的版本更多地关注这一点,但我通常会遵循这一点。
这里有一些关于该主题的补充阅读材料。希望这可以帮助。 MySQL 5.7 Documentation regarding Group by
这对我有用:
打开 http://localhost/phpmyadmin/ 然后单击 SQL 和 运行 此查询:
SET sql_mode = '';
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));