发生数据库错误的错误编号:1055



将数据库从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并运行此查询:

  1. SET sql_mode = '';
  2. 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关于组的文档

相关内容

  • 没有找到相关文章

最新更新