我一直在想,我自己不能解决。

我有这个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/

10-10 12:33