You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter4查询报sql_mode=only_full_group_by不兼容错误如何解决?

问题原因

sql_mode=only_full_group_by要求GROUP BY之后的所有操作(排序、返回字段等)只能使用分组键或者聚合函数计算后的结果。你当前的代码里orderBy用了原始未聚合的skift.start字段,同一vakt_id分组下存在多个skift.start值,不符合SQL规范所以触发报错。

解决方案

你已经通过selectMin计算出了每个任务对应的最早班次时间别名为sstart,直接将排序字段替换为这个聚合后的别名即可,完全符合规范,也不需要调整数据库配置。

修改后的CodeIgniter4代码如下:

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')
        // 替换原始的skift.start为聚合后的别名sstart
        ->orderBy('sstart')
        ->groupBy('vakter.vakt_id')
        ->paginate($nb_page, 'show');
    }

补充说明

因为vakter.vakt_id是vakter表的主键,vakter.oppdrag字段功能上完全依赖主键,所以不需要额外加到GROUP BY子句里,不会触发规则报错。如果后续需要返回更多vakter表的字段,直接在select里加即可,不需要调整GROUP BY逻辑。


内容的提问来源于stack exchange,提问作者Bengt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 02:15:03