2017-03-08 103 views
1

我想显示一个select查询并按date对它们进行分组。 我的查询:以上Codeigniter this-> db-> group_by date from timestamp format

SELECT COUNT(CASE WHEN status >= 4 THEN 1 END) as success, created_on FROM pickup GROUP BY (Date(created_on)) 

查询产生如我所料

$this->load->model('pickup_model'); 
 

 
     $this->db->select("COUNT(CASE WHEN status >= 4 THEN 1 END) AS success, pickup.created_on"); 
 
     $this->db->group_by("pickup.created_on");

created_ontimestamp格式的结果,但我需要将其转换为date格式,我不不知道如何在codeigniter中使用该查询,并且我不能只是$this->db->group_by("created_on");,因为我将它从模型中加入并加入某个表。我想知道它是否与别名有关?

我试着用:

  1. $this->db->group_by(DATE("pickup.created_on")):
  2. $this->db->group_by(date('Y-m-d', strtotime ('pickup.created_on')):
  3. $this->db->query("SELECT COUNT(CASE WHEN status >= 4 THEN 1 END) as success, created_on FROM pickup GROUP BY (Date('pickup.created_on'))");

没有上述工作

+0

您介意粘贴全功能/您正在使用的活动记录查询? group_by以时间戳格式工作,默认为升序。 –

+0

对上述部分评论感到抱歉,我的想法实际上是指order_by。你是否在同一个select语句中尝试了group_by,而不是单独分组 –

+0

是的,我做过。但它不起作用。让我编辑问题 – may

回答

0

好吧,我有模拟的情况下,这样的

enter image description here

转换成CI

$this->db->select('count(ID) from pickup WHERE status >4) as success, created_on')->from('pickup')->group_by('created_on')->get()->result_array(); 

希望,将解决你的问题,如果需要更改表或字段的任何名称,按您的数据库架构。

+0

我有以下错误:错误编号:1064 您的SQL语法有错误;根据MariaDB知识,检查与您的MariaDB服务器版本相对应的手册,以便在'as成功,'created_on'从'pickup'GROUP BY'pickup'pickup''created_on','1号线'处创建'''处使用正确语法' – may

+0

基地https://www.techonthenet.com/mariadb/alias.php我认为你需要更换与AS –

+0

仍然得到相同的错误:( '你有你的SQL语法错误;检查手册,对应于你的MariaDB服务器版本在'AS成功'附近使用正确的语法, – may

0
$this->db->select("pickup.created_on"); 
$this->db->select("COUNT(CASE WHEN status >= 4 THEN 1 END) AS success",FALSE); 
$this->db->group_by("pickup.created_on"); 

希望这是你的工作。

+0

我做到了,但它返回所有行,我认为这是因为时间戳字段'created_on'在每一行中包含不同的值 – may