我一直在想,我自己不能解决。
我有这个mysql表与网站访问者的统计信息
+-----------------------------+
+ date | visits +
+-----------------------------+
+ 2014-03-02 | 736 +
+ 2014-03-03 | 936 +
+ 2014-03-06 | 54 +
+-----------------------------+
我想回应一个星期的统计报告,但也要显示表中没有数据的日子。
输出应为:
2014-03-01: 0
2014-03-02: 736
2014-03-03: 936
2014-03-04: 0
2014-03-05: 0
2014-03-06: 54
2014-03-07: 0
请注意,我知道如何使用此功能执行此操作:
$first = '2014-03-01';
$last = '2014-03-07';
while (strtotime($first) <= strtotime($last)) {
$related10 = mysql_query("SELECT * FROM stats WHERE date >= '$first' and date <= '$last'");
$rows = mysql_fetch_array($related10);
$date = $rows['date'];
$visits = $rows['visits'];
echo ''.$date.': '.$visits.'';
$first = date("Y-m-d", strtotime("+1 day", strtotime($first)));
}
但是此函数的问题在于,它为每个日期运行一个sql查询,并且对于较大的日期范围,它在加载页面时持续几分钟。
我想用一个SQL查询完成
应该是这样的
$related10 = mysql_query("SELECT * FROM stats WHERE fecha >= '$first' and fecha <= '$last'");
while($rows = mysql_fetch_array($related10)) {
//function to add the missing date data.
echo $output;
}
有谁知道如何解决这个问题?
提前非常感谢您。
最佳答案
拉法(Rafal)击败了我,放在这里是一般想法。请注意,我在这里运行两个循环,但是您可能可以进一步改进算法。
// first put the date value into the "key" of each array item
$rows2 = array();
foreach ($rows as $row) {
$rows2[$row['date']] = $row['visits'];
}
$currentTs = strtotime('2014-03-01');
$lastTs = strtotime('2014-03-07');
while ($currentTs < $lastTs) {
$displayDate = date('Y-m-d', $currentTs);
echo $displayDate . " = ";
if (!empty($rows2[$displayDate])) {
echo $rows2[$displayDate]; // echo the visits
}
else {
echo '0';
}
echo "\n";
$currentTs = strtotime('+1 day', $currentTs);
}
关于php - 如何从mysql表中回传整周的统计信息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23045579/