1

我有以下mysql查询

SELECT count(order_id), date FROM tbl_order WHERE campaign_status = 'In Progress' or campaign_status = 'Pending' GROUP BY DATE_FORMAT(date,'%d %b %y')

然后跟随循环

<?php do { ?> 
  ['<?php echo $row_chartData['date']; ?>', <?php echo $row_chartData['count(order_id)']; ?>],
<?php } while ($row_chartData = mysql_fetch_assoc($chartData)) ?>

此循环用于为我的图表创建数据。现在的问题是,有些日子用户不在我的商店下订单,所以这些日期没有存储在数据库中,所以当我循环遍历这些日期时,这些日期没有显示在上面的结果和图表中。

我的问题是,有没有办法在上面的循环中显示那些丢失的日期,即使它们不存在于 mysql 数据库中。

感谢帮助。

4

2 回答 2

0

是的。

首先制作$row_chartData为数组而不是 mysql_result。

1)找到范围内的最小日期或您要开始的任何日期

function _getDate($row) {
    return $row['date'];
}
$dates = array_map('_getDate', $row_chartData);

$minDate = min($dates);

2)找到范围内的最大日期或您想要结束的任何日期

$maxDate = min($dates);

$dateRangeArray = array();

$date = $minDate;

while($date < $maxDate) {
    $dateRangeArray[] = $date;
    $date = date('Y-m-d', strtotime($date . ' +1 day'));
}

3)使$row_chartdata数组中每个元素的键成为date索引的值

foreach($row_chartData as $key => $row) {
    $row_chartData[$row['date']] = $row;
    unset($row_chartData[$key]);
}

4)迭代范围内的每一天并将该日期与$row_chartdata数组中的索引匹配

foreach($dateRangeArray as $date) { if(isset($row_chartData[$date])) { //做任何事情 } }

于 2013-05-21T22:44:15.553 回答
0

好吧,在这种情况下,根据日期范围创建一个临时数组,例如,如果您想显示从 5 月 1 日到 5 月 31 日的图表。从 1 到 30 循环,

set $data[i] = 0;

现在遍历数据库记录并设置

$data['date'] = $row['count']
于 2013-05-21T22:44:34.190 回答