【问题标题】:How to group by date with Codeigniter active record?如何使用 Codeigniter 活动记录按日期分组?
【发布时间】:2012-02-23 13:04:01
【问题描述】:

我想按日期对博客表中的数据进行分组。

我的数据库中有一个日期时间字段,我将使用它按月和年对数据进行分组。 (例如 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 年 12 月

【问题讨论】:

    标签: codeigniter datetime date group-by


    【解决方案1】:

    这一行,

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

    Month 在这一行是一个 PHP 函数。如果要使用 SQL MONTH 和 YEAR 函数,这行必须是这样的:

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

    【讨论】:

      【解决方案2】:

      你的查询应该是

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

      除非使用查询方法,否则不能通过 CI 的 activerecord 运行 SQL 函数

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

      【讨论】:

      • 这有点用。但我每个月都会得到超过 1 个结果。如何以存档格式显示(2012 年 1 月、2012 年 2 月等)。
      • 桌子长什么样?月份和年份在不同的列中吗?
      【解决方案3】:

      在 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
          )
      

      希望这对您有所帮助。谢谢!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-31
        • 1970-01-01
        • 1970-01-01
        • 2014-04-05
        • 2021-11-20
        • 1970-01-01
        • 2014-12-15
        相关资源
        最近更新 更多