Php 没有结果的Mysql查询回显0

Php 没有结果的Mysql查询回显0,php,mysql,loops,Php,Mysql,Loops,在过去30天的运行列表中,我正在为一个特定的客户机从mysql数据库构建一个调用数数组。到目前为止,我的代码用于将有调用的天数添加到数组中,但对于没有调用的天数(数据库中没有条目),我需要显示“0”。以下是迄今为止的me代码: $query="SELECT COUNT(*) FROM my_db WHERE client_phone='clint_phone#' GROUP BY calldate"; $result = mysql_query($query); $data = arr

在过去30天的运行列表中,我正在为一个特定的客户机从mysql数据库构建一个调用数数组。到目前为止,我的代码用于将有调用的天数添加到数组中,但对于没有调用的天数(数据库中没有条目),我需要显示“0”。以下是迄今为止的me代码:

$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数据库将列客户端电话,calldate。我想用数组中的数据建立一个图表。图中的每个点将表示一天以及该客户机在该天的呼叫数。我正在构建上述查询以填充该数组。我试图倒计时30天,并将每天的总调用数输入数组

编辑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);
顶部的输出看起来不错,只是缺少一个分配给data[]数组以外日期的零。第二个数组中缺少的日期为零,但其他不应被覆盖的日期为零


谢谢你的帮助

查找该时间范围内的每个日期并为此执行任务并不是解决方案的标准。但这取决于主机是否允许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
}
}

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

我对php有点陌生,但我不知道这如何在没有任何条目的日子将“0”添加到我的数组中。很抱歉,我误解了你的意思,因为从我的角度来看,表中的数据是如何处理的还不清楚。好吧,我不认为在运行print\u r()时,日期被设置为键在数组上,我得到数组([0]=>3[1]=>1[2]=>3[3]=>1)等等。根据我的第一篇文章,我是否需要做一些不同的事情来获得日期作为键?@Milksnake12:是的,替换你的$data[]=$row[0];$data[$result['calldate']]=$row[0];它可能与此不完全相同,但有点类似,其基本思想是$data[]使索引成为键,而$data[$date\u value]使日期值字符串成为键。Print\r只返回$data[$result['calldate']]:数组([]=>1)。我也尝试了$data[row['calldate']],但没有成功。是因为我使用的是mysql_fetch_row吗?我不知道您的数据库结构是什么,所以从我的上下文来看,我不知道您所说的每天查询是什么意思。。。这是表中的变量之一吗?请进一步说明。您的意思是,数组中不包含的每个日期都没有调用,并且您希望在数组中为每个日期插入一个0吗?能否显示
my_db
结构和条目?您是说$data是您的数组,其中键作为日期,值作为在数据库中找到的查询数。。。你想在该时间跨度内的每个日期都将没有值为零的查询放入数组中吗?是的,我认为这是正确的(抱歉有点新)。@Milksnake12:我想我知道怎么做,但代码非常复杂。。。基本思路是运行此任务;然后创建一个数组,其中包含所需范围内的每个日期;然后运行for循环,说明如果db_date不在data_数组中,则添加db_date[“date_数组['date']”]=0。
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
}
}