【问题标题】:Codeignighter issue with groupbyGroup by 的 Codeigniter 问题
【发布时间】:2014-11-26 23:07:29
【问题描述】:

我试图在活动记录/codeignighter 中对我的数据进行分组,以便能够计算每天报告的订单数量。

order_date 字段是一个使用PHP - time() 填充的INT(11)。 有一个created 字段,但我还没有使用它。

数据库是这样的

(注意数据只是样本,order_date 与创建日期不匹配)

id | order_date | order_total |created....
---+------------+-------------+----------
0  | 1411780207 | 12.50       |2014-10-01 00:12:23 ....
1  | 1411750209 | 14.50       |2014-10-02 00:22:33....
1  | 1412780309 | 14.50       |2014-10-02 00:25:33....

当我使用下面的代码时,我会在同一天获得多条记录,因为我认为它也是按精确到秒的时间分组的。如何仅按 D/M/Y 日期分组?

public function get_orders($limit = 5, $date_start ='01/01/2001',$date_end='01/12/2001')
{
    //first convert the date format
    $date_start = strtotime( $date_start );
    $date_end = strtotime( $date_end ); 


    $this->db->select('order_date, count(*) as total_orders, sum(order_total) as orders_total');
    $this->db->where('order_date >=', $date_start);
    $this->db->where('order_date <=', $date_end);
    $this->db->order_by('order_date desc', FALSE);
    $this->db->group_by('order_date');
    $this->db->limit($limit);

    return $this->db->get('orders')->result();

}  

【问题讨论】:

  • order_date 使用的 db 字段类型是什么

标签: php sql codeigniter activerecord


【解决方案1】:

我认为你应该这样做。

$secondOfDay = 86400; //second in a day
$this->db->group_by("CEILING(order_date/{$secondOfDay})");

我想你知道我想在上面的代码块中提到什么。

对不起我的英语。

【讨论】:

    【解决方案2】:

    您需要按天进行分组,而不是按日期时间。我会将分组更改为

    $this->db->group_by(DATE_FORMAT('order_date', '%y-%m-%d'));
    

    这将仅返回日期 2014-10-01、2014-10-02,其中 2014-10-02 包含 2 个订单。

    通过按时间分组,您希望订单在一天中的同一时间而不是同一天发生。

    【讨论】:

      猜你喜欢
      • 2012-10-02
      • 1970-01-01
      • 2010-11-10
      • 2010-12-18
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2012-12-02
      相关资源
      最近更新 更多