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

CodeIgniter中MySQL按特定值排序失败:CASE语句不生效求助

解决CodeIgniter中CASE表达式排序失效的问题

嘿,我来帮你搞定这个排序的问题!你遇到的情况其实是CodeIgniter查询构造器的默认行为导致的——它会自动给order_by里的字段名加上反引号做转义,但你的CASE语句是一个自定义的SQL表达式,不是普通的表字段,转义之后MySQL就没法正确解析这个逻辑了。

直接修复方案

只需要给第二个order_by调用加上第三个参数FALSE,告诉CodeIgniter不要转义这个表达式就行:

$this->db->select('*');
$this->db->from('Questions');
$this->db->where('Questions.Status !=', 0);
$this->db->order_by('IdQuestion', 'DESC');
// 添加第三个参数FALSE,禁用自动转义
$this->db->order_by('(CASE WHEN Status = 3 THEN 1 ELSE 2 END)', 'DESC', FALSE);

更清晰的优化写法

你也可以把这个CASE表达式放到select语句里,给它起一个别名,然后用别名来排序,这样代码可读性更高,还能顺便拿到这个排序标识:

$this->db->select('*, (CASE WHEN Status = 3 THEN 1 ELSE 2 END) AS sort_order');
$this->db->from('Questions');
$this->db->where('Questions.Status !=', 0);
$this->db->order_by('IdQuestion', 'DESC');
$this->db->order_by('sort_order', 'DESC');

这样修改后,查询结果里会多一个sort_order字段,值是1或者2,方便你后续如果需要用到这个排序依据的话直接取用,逻辑也更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:25:40