如何解决sql_mode 不兼容的 codeigniter 4
我有一个查询,它在本地 wamp 服务器上运行良好,但上传到 mye 网络服务器时出现错误。看过类似的解决方案,但无法理解它以适应我的查询。
错误:
Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'intranett3.skift.start' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
我有 2 个表,一个主表和一个表用于转移到该分配
ex table vakter(在我的表中赋值被命名为 oppdrag 并且开始/停止被命名为 start/slutt)
vakt_id | 分配 | ... |
---|---|---|
1 | 任务 1 | ... |
前桌滑雪
skift_id | vakt_id | 开始 | 停止 | ... |
---|---|---|---|---|
1 | 1 | 2021-06-21 17:00:00 | 2021-06-21 18:00 | ... |
2 | 1 | 2021-06-21 18:00:00 | 2021-06-21 21:00 | ... |
我想展示
分配 | 开始 | 停止 |
---|---|---|
任务 1 | 2021-06-21 17:00:00 | 2021-06-21 21:00 |
开始日期是在 vakt_id 为 1 的skift 中最早的时间 并且停止日期是同一行中的最晚时间。
桌子
CREATE TABLE IF NOT EXISTS `vakter` (
`vakt_id` int(5) NOT NULL AUTO_INCREMENT,`status` enum('Aktiv','Utsatt','Avlyst','Ubekreftet') NOT NULL,`lag_id` int(5) NOT NULL,`type_id` int(5) NOT NULL,`sted_id` int(5) NOT NULL,`start` datetime DEFAULT NULL,#this is not populated
`slutt` datetime DEFAULT NULL,#this is not populated
`oppdrag` varchar(255) NOT NULL,`info` text NOT NULL,`kunde_id` int(5) NOT NULL,`kunderef` varchar(255) NOT NULL,`rapportok` tinyint(1) NOT NULL,`created_by` int(5) NOT NULL,`created` datetime NOT NULL,PRIMARY KEY (`vakt_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1568 DEFAULT CHARSET=latin1;
和表 2
CREATE TABLE IF NOT EXISTS `skift` (
`skift_id` int(11) NOT NULL AUTO_INCREMENT,`vakt_id` int(5) NOT NULL,`start` datetime NOT NULL,`slutt` datetime NOT NULL,`mannskap` int(5) NOT NULL,`hospitant` int(5) NOT NULL,`bil` varchar(255) NOT NULL,`ressursgruppe` int(5) NOT NULL,PRIMARY KEY (`skift_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2223 DEFAULT CHARSET=latin1;
我的查询
public function paginatevakter(int $nb_page,int $lagID) {
return $this->select('vakter.oppdrag,vakter.vakt_id')
->selectMin('skift.start','sstart')
->selectMax('skift.slutt','sslutt')
->join('skift','skift.vakt_id = vakter.vakt_id','LEFT')
->where('skift.start > now()')
->where('lag_id',$lagID)
->selectCount('skift.vakt_id','ant_skift')
->orderBy('skift.start')
->groupBy('vakter.vakt_id')
->paginate($nb_page,'show');
}
在 group by 中尝试了不同的值。
PS 不能在表一中使用 start /stop(slutt),因为它是从旧数据库中导入的,而这些数据库没有使用过...
解决方法
当多行具有相同的 vakt_id
时,您想将它们打包在一起:
->groupBy('vakter.vakt_id')
... 并显示计算值(所有这些行中 start
的最小值):
->selectMin('skift.start','sstart')
然后你要求按原始值对结果进行排序:
->orderBy('skift.start')
从逻辑的角度来看,这没有意义。您的其中一台服务器中的 sql_mode=only_full_group_by
用于防止 MySQL 忽略这一点并产生潜在的错误结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。