使用 CodeIgniter 分组 [关闭]

Posted

技术标签:

【中文标题】使用 CodeIgniter 分组 [关闭]【英文标题】:Group By with CodeIgniter [closed] 【发布时间】:2017-05-19 06:57:24 【问题描述】:

我在项目中使用 CodeIgniter,这是我在模型中的代码

public function group_all_ville()  
        $this->db->select('*');
        $this->db->from('departement');
        $this->db->join('villes', 'villes.num_dept = departement.num_dept');
        $this->db->group_by('nom_dept'); 
        $query = $this->db->get(); 
        return $query->result();
    

这是执行后的错误

A Database Error Occurred

Error Number: 1055

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

SELECT * FROM `departement` JOIN `villes` ON `villes`.`num_dept` = `departement`.`num_dept` GROUP BY `nom_dept`

Filename: C:/wamp64/www/pneu/system/database/DB_driver.php

Line Number: 691

我尝试了不同的方法,但没有任何结果。谢谢

【问题讨论】:

您使用GROUP BY 子句和SELECT * 似乎很奇怪。当您想在 SELECT 中使用聚合函数(例如 SUM()COUNT() 等)时,GROUP BY 最合适。此问题显示代码和错误消息,但未能包含表架构、示例输入和所需的输出。缺少minimal reproducible example 使问题不清楚。我必须假设您正在寻找唯一的 nom_debt 值,但如果是这种情况,有更好的方法来隔离 DISTINCT 行。 ...实际上,根据 OP 的自我回答,这看起来像是适当的欺骗:***.com/q/656622/2943403 【参考方案1】:

这个解决方案对我有用:

$this->db->select('d.nom_dept');
$this->db->from('departement AS d, villes as v');
$this->db->where('v.num_dept = d.num_dept');
$this->db->group_by('d.nom_dept');

请参阅12.20.3 mysql Handling of GROUP BY 了解更多信息。

【讨论】:

【参考方案2】:

您好,我在系统迁移到mysql8.0时也遇到了这个问题。因为,有许多涉及分组的查询。我使用了没有更改 mysql 配置文件的代码。如果您不想禁用 ONLY_FULL_GROUP_BY,您可以单独查看您的查询。 SO explain it here

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

【讨论】:

请尝试更多地解释您的 sn-p 是如何工作的,以及为什么研究人员应该使用这种技术而不是其他技术。请更慷慨地提供您的见解。 禁用不是解决问题的好方法。见Why should not disable ONLY_FULL_GROUP_B【参考方案3】:

也使用order_by 子句

$this->db->group_by('nom_dept'); 
$this->db->order_by('nom_dept', 'asc');  # or desc

仅供参考: 设置 SQL 模式和会话集并不能修复实际错误。

示例(最好不要这样做

    https://***.com/a/35729681/4595675

【讨论】:

以上是关于使用 CodeIgniter 分组 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter + Smarty - 是不是相关?

使用 CodeIgniter 的 ActiveRecord 对多个条件逻辑进行分组

在 Codeigniter 中对 WHERE 子句进行分组

如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?

如何通过分组两列来防止重复? MYSQL/Codeigniter

如何在codeigniter中上传2个单独的图像