【发布时间】:2014-11-07 02:45:31
【问题描述】:
我需要制作一份包含当月总销售额的报告,对于没有销售额的月份,我的值为零。到目前为止,这是我正在使用的查询,我觉得我已经尝试了所有组合,但没有运气。为了我的报告目的,我需要 1 个数组中的月份和另一个数组中每个月的销售额。
查询:
$productSql = "SELECT months.monthnum, SUM(orders.total) FROM months LEFT JOIN orders ON months.monthnum = MONTH(orders.closeddate) WHERE orders.status = 'Closed' GROUP BY MONTH(orders.closeddate) ORDER BY months.monthnum ASC";
$productResult = mysql_query($productSql, $link);
while($productRow = mysql_fetch_array($productResult)){
$label[] = $productRow['months.monthnum'];
$data[] = $productRow['SUM(orders.total)'];
};
echo "[".json_encode($label).",".json_encode($data)."]";
结果:
[[null,null],["6000.00","3100.00"]]
如何让它在第一个数组中显示所有月份,在第二个数组中显示零销售月份?我认为它的 GROUP BY 让我很生气,但我需要它来增加销售额。帮助!
PS 我知道我应该停止使用 mysql,并且我会在这个项目完成后立即停止使用。谢谢!
编辑
var_dump 结果:
array(1) { [0]=> NULL } array(1) { [0]=> string(7) "6000.00" } array(2) { [0]=> NULL [1]=> NULL } array(2) { [0]=> string(7) "6000.00" [1]=> string(7) "3100.00" }
编辑 2
所以问题出在 WHERE 子句中。我需要 where 子句,因为我只想要已关闭的订单。当我取出 WHERE 子句时,它显示所有月份为零,表示没有销售的月份,并正确总结了有销售的月份。但是,它包括所有订单,而不仅仅是已关闭的订单。我应该把 WHERE 子句放在哪里,这样我仍然可以得到所有月份?
【问题讨论】:
-
数据库中是否已经有所有 tne 个月?如果不需要月份表,基本上是 12 个整数。
-
任何提示为什么它会为 monthnum 列返回空值?完全没有意义
-
@sergio0983 我认为是这个小组搞砸了,但我不确定。
-
您正在执行 GROUP BY MONTH(orders.closeddate),但在一个月内没有任何订单为空。您需要改为GROUP BYmonths.monthnum。
-
将 orders.status = 'Closed' 的检查放入 JOIN 的 ON 子句而不是 WHERE 子句。这将排除联接之前而不是联接之后的行。
标签: php mysql arrays left-join