我正在使用PHP/MySQL每个产品过去6,3,1个月的平均月销售额快速计算
我有大约2,000个产品。我必须计算每个产品过去6,3,1个月的平均月销售额并一次显示在页面中...
目前我有以下代码(每个产品的循环) :
$past_month_sales = $this->SalesPerProduct->getSalesForMonthYear($acc_code,
$item_code, $past_month[0],
$past_month[1]);
$past_two_months_sales = $this->SalesPerProduct->getSalesForMonthYear($acc_code,
$item_code, $past_two_months[0],
$past_two_months[1]);
$past_three_months_sales = $this->SalesPerProduct->getSalesForMonthYear($acc_code,
$item_code, $past_three_months[0],
$past_three_months[1]);
$past_four_months_sales = $this->SalesPerProduct->getSalesForMonthYear($acc_code,
$item_code, $past_four_months[0],
$past_four_months[1]);
$past_five_months_sales = $this->SalesPerProduct->getSalesForMonthYear($acc_code,
$item_code, $past_five_months[0],
$past_five_months[1]);
$past_six_months_sales = $this->SalesPerProduct->getSalesForMonthYear($acc_code,
$item_code, $past_six_months[0],
$past_six_months[1]);
//for past 3 months
if($past_month_sales == 0
|| $past_two_months_sales == 0
|| $past_three_months_sales == 0){
$past_three_sales_ave = "n/a";
}else{
$past_three_sales_ave = round(($past_month_sales
+ $past_two_months_sales
+ $past_three_months_sales)
/3);
}
//for past 6 months
if($past_month_sales == 0
|| $past_two_months_sales == 0
|| $past_three_months_sales == 0
|| $past_four_months_sales == 0
|| $past_five_months_sales == 0
|| $past_six_months_sales == 0){
$past_six_sales_ave = "n/a";
}else{
$past_six_sales_ave = round(($past_month_sales
+ $past_two_months_sales
+ $past_three_months_sales
+ $past_four_months_sales
+ $past_five_months_sales
+ $past_six_months_sales)
/6);
}
但上面的代码是非常缓慢的,甚至100产品采取年龄的负荷......
我getSalesForMonthYear功能是这样的:
function getSalesForMonthYear($account_code, $item_code, $month, $year){
$sql = "select
SalesPerProduct.sales_value
from
sales_per_products as SalesPerProduct
where
account_code = '{$account_code}' and
item_code = '{$item_code}' and
month = '{$month}' and
year = '{$year}'";
$val = $this->query($sql);
if(empty($val[0]['SalesPerProduct']['sales_value'])){
$val = 0;
}else{
$val = $val[0]['SalesPerProduct']['sales_value'];
}
return $val;
}
任何想法如何这款C一个很快? TIA!
在网页,保存旧的平均销售和开始您计算日期和结束日期,那么当你想获得一个新的,用这三个数字来计算 – 2012-08-10 08:57:07
强烈同意。一个月过去了,销售数字是历史性的,因此应该自动计算并随后进行缓存,甚至可以汇总在自己的表中。 – Cups 2012-08-10 09:09:54