3

我一直在一个网站上工作,我需要从特定的开始日期到特定的结束日期迭代数周,并对该范围的列求和,然后比较它并返回最大值。我正在总结一列并尝试将最大值返回给我的控制器。这是我的模型代码:

简而言之,我试图:

将特定周范围内的所有销售额相加,然后返回最高一周的销售额。

function get_best_week_in_range($rep_id, $start_date, $end_date)
{
    $highest_total = 0;

    $date = $start_date; 

    while($date < $end_date)
    {
        $this->db->select('u.rep_id, s.sales_quantity, sum(s.sales_quantity) as sales_quantity ');
        $this->db->join('sales as s','s.sale_rep_id = u.rep_id');

        $this->db->where('s.date >=', $start_date);
        $this->db->where('s.date <=', $end_date);

        $this->db->group_by('u.rep_id');
        $this->db->order_by('sales_quantity', 'desc');

        $query = $this->db->get('users as u');

        $row = $query->row();

        $highest_total = ($row->sales_quantity > $highest_total) ? $row->sales_quantity : $highest_total;

        $date = strtotime("+1 week", $date);
    } 

    return $highest_total;
}

此代码返回“0”作为最高总数。如果有人能启发我,我将不胜感激。

感谢您的任何帮助!

4

1 回答 1

1

如果我理解正确,您可以通过这样的查询获得所需的一切

SELECT SUM(sales_quantity) weekly_total
  FROM sales 
 WHERE sale_rep_id = $rep_id
   AND date BETWEEN $start_date AND $end_date
 GROUP BY WEEK(date)
 ORDER BY weekly_total DESC
 LIMIT 1

这是SQLFiddle演示

由于您获得了一位销售代表的价值,因此您不必只使用表格上JOINWHERE条件。sales

现在我不是 codeigniter 专家,但你的功能可能看起来像

function get_best_week_in_range($rep_id, $start_date, $end_date) {
     $this->db->select_sum('sales_quantity', 'weekly_total')
              ->from('sales')
              ->where('sale_rep_id', $rep_id)
              ->where('date >=', $start_date)
              ->where('date <=', $end_date)
              ->group_by('WEEK(date)')
              ->order_by('weekly_total', 'DESC')
              ->limit(1);
    $query = $this->db->get();
    return $query->row('weekly_total');
}
于 2013-06-15T23:12:13.197 回答