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_by在countries表中添加列还是在数据库检索后使用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)