Как сгруппировать по дате с активной записью Codeigniter? - PullRequest
6 голосов
/ 23 февраля 2012

Я хочу сгруппировать данные в своей таблице блогов по дате.

У меня есть поле даты и времени в моей базе данных, которое я буду использовать для группировки своих данных по месяцам и годам.(пример 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
  • Январь 2012
  • Декабрь 2012

Ответы [ 3 ]

8 голосов
/ 23 февраля 2012

эта строка,

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

Месяц - это функция php этой строки.Если вы хотите использовать функции sql MONTH и YEAR, эта строка должна выглядеть следующим образом:

$this->db->group_by('MONTH(date), YEAR(date)');
1 голос
/ 23 февраля 2012

Это очень просто попробовать в 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);

ИЛИ простой запрос

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
    )

Надеюсь, это поможет вам. Спасибо !!

1 голос
/ 23 февраля 2012

Ваш запрос должен быть

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

. Вы не можете запускать функции SQL через activerecord CI, если не используете метод запроса

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