CodeIgniter Datamapper ORM是否支持ORDER BY子句中的MySQL CASE语句?

Der*_*ald 0 mysql codeigniter codeigniter-datamapper

使用Datamapper 1.8.1-dev for PHP的CodeIgniter,我正在尝试构建此查询以在列表顶部优先考虑一个国家/地区名称:

SELECT * FROM countries
ORDER BY CASE name WHEN 'Australia' THEN 1 ELSE 2 END, name
Run Code Online (Sandbox Code Playgroud)

我的国家模型上的PHP(扩展了Datamapper):

$countries = new Country();
$countries->order_by("CASE name WHEN 'Australia' THEN 1 ELSE 2 END, name");
$countries->get_iterated();
Run Code Online (Sandbox Code Playgroud)

而是将Datamapper解析为"CASE"作为表名,构建此语法错误查询:

SELECT * FROM (`countries`)
ORDER BY `CASE` name WHEN 'Australia' THEN 1 ELSE 2 END, `countries`.`name`
Run Code Online (Sandbox Code Playgroud)

我假设CASE案例没有被处理,因为这个流控制语句刚刚添加到MySQL 5中?我唯一的选择是order_bycountries表中添加列还是在数据库检索后使用PHP排序函数?

小智 5

我能够在订单中使用案例陈述.您只需要在括号中包装case语句.如果不这样,单词case将被视为列名并返回引用.

$this->db->distinct(); 
$this->db->select('country');         
$this->db->from('distributors');
$this->db->where('country  != ', '');
$this->db->order_by("(CASE country WHEN 'UNITED STATES OF AMERICA' THEN '1' ELSE country END)");
Run Code Online (Sandbox Code Playgroud)