使用 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 的 ActiveRecord 对多个条件逻辑进行分组
如何检查请求是不是通过 CodeIgniter 中的 AJAX 发出?