查询我们没有出售任何东西的缺失月份?

时间:2015-07-23 12:23:03

标签: php mysql

我的查询是:

$sql="SELECT  COUNT(`Variant`) AS tsold, MONTHNAME(`sold_date`) AS mname FROM `vehicle_sold` GROUP BY MONTH(`sold_date`) ";
$result = mysqli_query($conn,$sql);

   while($row = mysqli_fetch_array($result)) {  


    echo $row["mname"],"---", $row["tsold"],"<br />";

}

给出了以下结果:

January---1
February---2
March---7
April---11
May---6
July---1

6月没有销售,所以我想要的是返回“June --- 0”的查询。如果它还显示截至12月的下个月,那没关系。我想要以下输出:

January---1
February---2
March---7
April---11
May---6
June---0
July---1
Aug---0
Sept---0
Oct---0
Nov---0
Dec---0

2 个答案:

答案 0 :(得分:3)

使用月份名称数组 -

$months = array('January', 'February', ..., 'December');

使用从数据库返回的数据生成并使用数组 -

while($row = mysqli_fetch_array($result)) {
    $data[$row["mname"]] = $row["tsold"];
}

并相应打印 -

foreach($months as $value) {
    echo $value.' - '. (array_key_exists($value, $data) ? $data[$value] : 0) . '<br/>';
}

答案 1 :(得分:1)

如果您没有出售任何东西,我假设您实际上没有数据库中的数据。因此有点难以生成没有信息的月份。

您想要一个包含所有月份的数组,与销售额相对应。 我建议你做这样的事情:

准备一个数组,其中包含所有值为0的月份(默认情况下你可以使这个数组列表'更好',但现在作为示例)。

$data['March'] = 0;
$data['April'] = 0;

现在你可以像你一样进行迭代

while($row = mysqli_fetch_array($result)) {
$data[$row["mname"]] = $row["tsold"];
}

如果数据库未填充该值,则该值仍为0.否则将被数据库值覆盖。