Codeigniter问题与group by

时间:2014-10-02 00:20:23

标签: php sql codeigniter activerecord

我试图将我的数据分组到活动记录/代码记录器中,以便能够计算每天报告的订单数量。

order_date字段是INT(11),使用PHP - time()填充它。 有一个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();

}  

2 个答案:

答案 0 :(得分:0)

我认为你应该这样做。

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

我认为您知道我想在上面的代码块中提到的内容。

抱歉我的英文。

答案 1 :(得分:0)

您需要在当天而不是日期时间进行分组。我会将小组改为

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

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

通过按时间分组,您预计订单会在一天而不是同一天的同一时间发生。