2012-02-23 28 views
6

Tôi muốn nhóm dữ liệu trong bảng blog của tôi theo ngày.Làm thế nào để nhóm theo ngày với hồ sơ hoạt động Codeigniter?

Tôi có trường datetime trong cơ sở dữ liệu của mình mà tôi sẽ sử dụng để nhóm dữ liệu của mình theo tháng và năm. (Ví dụ 2012-01-23 17:25:18)

Tôi đã thêm đoạn mã sau vào mô hình của tôi trong một nỗ lực để nhóm dữ liệu của tôi theo tháng và năm (như một kho lưu trữ)

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; 
} 

Nhưng tôi nhận được lỗi sau: Fatal error: Call to undefined function Month()

Muốn kết quả để trông giống như:

  • tháng 2 năm 2012
  • tháng 1 năm 2012
  • Tháng 12 2012

Trả lời

8

dòng này,

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

Tháng là hàm php dòng này. Nếu bạn muốn sử dụng sql THÁNG và chức năng NĂM, dòng này phải như thế này,

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

truy vấn của bạn nên được

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

Bạn không thể chạy chức năng SQL qua activerecord của CI, trừ khi bạn sử dụng phương pháp truy vấn

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

Điều đó hoạt động tốt. Nhưng tôi nhận được hơn 1 kết quả cho mỗi tháng. Làm cách nào tôi có thể hiển thị (tháng 1 năm 2012, tháng 2 năm 2012, v.v.) ở định dạng lưu trữ. – hairynuggets

+0

Bảng trông như thế nào? tháng và năm trong các cột riêng biệt là gì? –

1

Nó rất đơn giản thử điều này trong Active Record

$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); 

HOẶC đơn giản Query

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; 

Mảng in ra

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

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

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

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

Hy vọng điều này sẽ giúp bạn. Cảm ơn!!

Các vấn đề liên quan