2012-02-23 32 views
6

我想按日期將我的博客表中的數據分組。如何使用Codeigniter活動記錄按日期分組?

我在我的數據庫中有一個日期時間字段,我將按月和年對數據進行分組。 (例如2012-01-23 17點25分18秒)

我都在試圖組我的數據的月份和年份(如存檔)下面的代碼添加到我的模型

function get_archive_links(){ 

     $this->db->order_by('date','desc'); 
     $this->db->group_by(Month('date'), Year('date')); 
     $query = $this->db->get('blog'); 

    foreach ($query->result() as $row) { 
     $data[] = array(
      'id' => $row->id, 
      'date' => $row->date 
     ); 
    } 

    return $data; 
} 

但我收到以下錯誤:Fatal error: Call to undefined function Month()

想要的結果看起來像:

  • 2012年2月
  • 2012年1月2012

回答

8

此行無法通過CI的ActiveRecord的運行SQL功能,

$this->db->group_by(Month('date'), Year('date')); 

月份是php函數這一行。如果你想使用SQL月份和年份的功能,這條線一定是這樣的,

$this->db->group_by('MONTH(date), YEAR(date)'); 
1

您的查詢應該是

$this->db->group_by('date'); 

,除非您使用的查詢方法

$this->db->query("GROUP BY MONTH('date')"); 
+1

這是有用的。但是我每個月都會得到1個以上的結果。我如何以檔案格式顯示(2012年1月,2012年2月等)。 – hairynuggets 2012-02-23 13:26:58

+0

桌子是什麼樣的?在不同的專欄中是月份和年份? – 2012-02-23 16:27:22

1

這是非常簡單嘗試這種在活動記錄

$result = $this->db->select('DISTINCT DATE_FORMAT(`t`.`date_field`, "%M %Y") `myformat`', FALSE)->from('my_table `t`')->group_by('MONTH(`t`.`date_field`)')->order_by('t.date_field', 'DESC')->get()->result(); 
print_r($result); 

或簡單的查詢

SELECT DISTINCT 
    DATE_FORMAT(`t`.`date_field`, "%M %Y") `myformat` 
FROM 
    (`my_table` `t`) 
GROUP BY MONTH(`t`.`date_field`) 
ORDER BY `t`.`date_field` DESC; 

輸出打印陣列

[0] => stdClass Object 
    (
     [myformat] => August 2011 
    ) 

[1] => stdClass Object 
    (
     [myformat] => July 2011 
    ) 

[2] => stdClass Object 
    (
     [myformat] => June 2011 
    ) 

[3] => stdClass Object 
    (
     [myformat] => March 2011 
    ) 

希望這可以幫助你。謝謝!!