2

我正在为过去 30 天的运行列表中的 mysql 数据库构建一个特定客户端的调用次数数组。到目前为止,我的代码可用于添加调用数组的日期,但我需要在没有调用的日期显示“0”(数据库中没有条目)。到目前为止,这是我的代码:

$query="SELECT COUNT(*) FROM my_db WHERE client_phone='clint_phone#' GROUP BY calldate"; 
$result = mysql_query($query);
    $data = array();
    while ($row = mysql_fetch_row($result)) {
       $data[] = $row[0];
    }

我只需要一种方法来显示今天我有 30 个电话,而昨天我有 0 个电话,我需要它来显示 [30,0]。我所拥有的只会显示 [30]。

编辑 * 我有一个 mysql 数据库将列 client_phone、calldate。我希望使用数组中的数据构建图表。图表的每个点将代表一天以及该客户当天的呼叫次数。我正在构建上述查询来填充该数组。我试图倒数三十天,并将每天的总呼叫数输入数组。

编辑 2* 我已经差不多了。我在“foreach”区域遇到问题。下面是带有两个 print_r() 转储数组的代码。第一个看起来不错,但第二个显示一些不应该被覆盖的数组条目:

$query="SELECT calldate, COUNT(*) FROM my_db WHERE client_phone='phone#' and calldate>='20130101' AND calldate<='20130107' GROUP BY calldate ORDER BY calldate"; 
$result = mysql_query($query);
    $data = array();
    while ($row = mysql_fetch_array($result)) {
      $data[$row['calldate']] = $row[1];
    }

$startDate = '20130101'; 
    $endDate = '20130107'; 
    $dates = array(); 

    for($current = $startDate; $current != $endDate; $current = date('Ymd', strtotime("$current +1 day"))) {
        $dates[] = $current; 
    }
    $dates[] = $endDate;  

print_r ($data);
echo "<br />";

foreach($dates as $date){
if (in_array($date, $data)) {
    // that date was found in your db_date array(therefore had queries)
}else{
$data[$date] = 0; //date was not found in your db_array so we set that date with no   queries to zero
}
}

print_r ($data);

我在浏览器中运行它,我得到了这个:

Array ( [20130101] => 1 [20130104] => 6 [20130105] => 2 [20130106] => 1 [20130107] => 3 ) 
Array ( [20130101] => 0 [20130104] => 0 [20130105] => 0 [20130106] => 0 [20130107] => 0 [20130102] => 0 [20130103] => 0 )

顶部输出看起来不错,只是缺少分配给不在 data[] 数组中的日期的零。第二个数组在缺失的日期中有零,但其他不应该被覆盖的日期。

谢谢你的帮助!

4

1 回答 1

0

找到该时间跨度内的每个日期并为此执行任务并不是真正的解决方案标准。但取决于您的主机是否允许 cron 任务;如果那天没有查询,您是否能够使用 cron 任务在该日期晚上 11:59 自动将 0 插入到您的数据库中;您可以简单地提取所有日期。

如果您不想使用 cron 任务执行此操作,我认为您可以通过这种方式进行管理...

      $startDate = '2009-01-28'; 
        $endDate = '2009-02-04'; 
        $dates = array(); 

        for($current = $startDate; $current != $endDate; $current = date('Y-m-d', strtotime("$current +1 day"))) {
            $dates[] = $current; 

        $dates[] = $endDate;  
    }

然后这样做

foreach($dates as $date){
if (array_key_exists($date, $data)) {
    // that date was found in your db_date array(therefore had queries)
}else{
$data[$date] = 0; //date was not found in your db_array so we set that date with no queries to zero
}
}

这可能需要一些小的调整,因为我没有测试过;但这应该有效;如果不是非常接近它的东西应该。希望这可以帮助。

于 2013-01-08T02:07:26.513 回答