将数据库从mysql更改为mysqli并获取错误 - 发生了数据库错误
错误编号:1055
SELECT列表的表达式#23不在组中,并包含非聚集的列" zipbizzlatestdb.pia.id"',它在功能上不依赖于组中的列中的列;这与sql_mode = hell
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
中,因此请检查此链接[https://www.sitepoint.com/quick-tip-how-to-perman---------------------change-change-sql-mode-in-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
注意不适合窗口OS
这对我有用:
打开http://localhost/phpmyadmin/然后单击SQL并运行此查询:
-
SET sql_mode = '';
-
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
在阅读您的SQL时,您要求返回每个列(即 *)以及第二次ID(O.ID已经通过 *检索 *),那么您是查询 group_concat(pia.applicantid)的聚合功能。但是,您的小组按子句仅请求按(组为)O.ID汇总。
sql不喜欢这样,因为它不知道您要查询使用 *的数据集中的其他字段该怎么办。
我怀疑您想以总体方式查看与O.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和组中。这是ANSI标准的一部分,对于所有SQL口味都应该是正确的。我相信MySQL 5.7及以前的版本比以前的版本更重要,但通常我会遵循此内容。
这是有关该主题的一些补充阅读。希望这可以帮助。MySQL 5.7关于组的文档