Echo 0 for Mysql查询没有结果

时间:2013-01-08 02:03:46

标签: php mysql loops

我正在为过去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 db将列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 []数组中的日期的零。第二个数组在缺失的日期中有零,但其他的不应该是不应该的。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

查找该时间段内的每个日期并为此执行任务并不是解决方案的标准。但取决于你的主机是否允许cron-tasks;如果您能够使用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
}
}

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