CodeIgniter 3 - 非聚合列组

时间:2018-02-26 16:22:31

标签: php mysql codeigniter codeigniter-3

当我尝试在CodeIgniter 3中运行此查询时,它会给我这个错误:

Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'forum.phrases.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

SELECT `id`, `keyword`, `value`, `language` FROM `phrases` GROUP BY `language`

PHP:

$query = $this->db->select("id, keyword, value, language")
            ->group_by("language")
            ->get("phrases")
            ->result();

我有一点谷歌搜索,但我不太明白答案,主要是因为查询与CI无关,而且非常复杂......如何在codeigniter中修复?

我不想更改任何MySQL设置。

2 个答案:

答案 0 :(得分:1)

表达式1

SELECT list is not in GROUP BY clause and contains nonaggregated column 'spd.quantity' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

只需在查询上方添加以下行即可。

$this->db->query("SET sql_mode=(SELECT REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', ''));");

答案 1 :(得分:0)

这不是CodeIgniter特有的问题 - 它是SQL标准的一部分,内置于MySQL中。它的存在使它可以验证您的数据并鼓励良好的数据库设计和查询。您有两种方法可以解决它:

  1. 您可以撰写查询"更正"办法。这是SQL92规范的一个问题,但后来在SQL99标准中进行了修改以允许非聚合:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

  2. 另一种方式,也就是更常见的响应,是修改my.cnf文件并禁用only_full_group_by的强制SQL模式。 Disable ONLY_FULL_GROUP_BY