Codeigniter按时间顺序排序 - 查询生成

时间:2015-03-28 10:58:17

标签: php mysql codeigniter

我实际上需要像

这样的mysql查询
SELECT *, CONCAT(pri_hours, ':', pri_minutes, ' ', IF(pri_ampm = 1, 'am', 'pm')) as hr FROM (`sms_primary`)  ORDER BY STR_TO_DATE(hr, '%h:%i %p')

当我使用codeigniter时,我写了如下查询

       $this->db->select("*,CONCAT(pri_hours,':', pri_minutes,' ',IF(pri_ampm = 1,'am','pm')) as hr",FALSE);
       $this->db->from('sms_primary');
       $this->db->order_by("STR_TO_DATE(hr,'%h:%i %p')");

但我没有得到预期的查询,我得到它如下

SELECT *, CONCAT(pri_hours, ':', pri_minutes, ' ', IF(pri_ampm = 1, 'am', 'pm')) as hr FROM (`sms_primary`) ORDER BY STR_TO_DATE(hr, `'%h:%i` %p') 

我希望你能发现生成的查询中的差异。它注入了一些不需要的操作员`。我只想删除它。怎么做?

更改

STR_TO_DATE(hr, `'%h:%i` %p') 

 STR_TO_DATE(hr, '%h:%i %p')

2 个答案:

答案 0 :(得分:0)

codeigniter正在添加反引号。在查询之前使用此

$this->db->_protect_identifiers=false; 

希望这会有所帮助

答案 1 :(得分:0)

您需要使用此 - > db-> _protect_identifiers = false;

在您的查询中,它应该是:

$this->db->_protect_identifiers = FALSE; // Make it false here $this->db->order_by("STR_TO_DATE(hr,'%h:%i %p')");
$this->db->_protect_identifiers = TRUE; // Make it true again when order_by code completed