我正在为过去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 []数组中的日期的零。第二个数组在缺失的日期中有零,但其他的不应该是不应该的。
感谢您的帮助!
答案 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
}
}
这可能需要一些小的调整,因为我没有测试过;但这应该有效;如果不是非常接近它的东西应该。希望这会有所帮助。