您当前位于: 首页 » PHP » 博客的按月归档是怎么实现的?统计每个月的日志篇数

博客的按月归档是怎么实现的?统计每个月的日志篇数01/04/2008

今天和小鸡的讨论中提到的这个问题,最初一直在想SQL语句应该怎么写?现在的时间存入数据库一般都采用UNIX时间戳的形式,还原起来也方便。因此,自然而然的想到构建每个月初和月末的时间段,然后每个月查数据库统计一次,如果要统计一年中每个月的日志篇数,就要查询12次数据库,效率相当的低!后来就偷看了BO-BLOG的代码,发现它只查询一次数据库就可以统计每个月的日志篇数,绝对的值得学习,效率也是非常的好!(后面也截取了F2BLOG的按月归档的算法,和BO的如出一辙。)
下面赏析下代码:
BO的代码片段:
[codes=php]
  $allvaliddates=$blog->getarraybyquery("SELECT `pubtime` FROM `{$db_prefix}blogs` ORDER BY `pubtime` DESC");
  $allvaliddates=$allvaliddates['pubtime'];
  $resultdates=array();
  $result="<table width=\"100%\">";
  if (is_array($allvaliddates)) {
    foreach ($allvaliddates as $time) {
      $y=gmdate('Y', $time+3600*$config['timezone']);
      $m=gmdate('n', $time+3600*$config['timezone']);
      $resultdates[$y][$m]+=1;
    }
[/codes]

再看F2BLOG的:
[codes=php]
    $archives = $DMC->query("SELECT postTime FROM ".$DBPrefix."logs where $saveType ORDER BY postTime DESC");
    $articledb = array();
    while ($article = $DMC->fetchArray($archives)) {
      $article['dateline'] = format_time("Y,m",$article['postTime']);
      $articledb[]=$article['dateline'];
    }
    unset($article);
    $archivedb = array_count_values($articledb);
    unset($articledb);
[/codes]
同样的只查询一次数据库,就搞定了按月归档,唉,多多学习了,谨做小记,告诫自己一定要写出高效的代码!

2,100位童鞋围观 | 3条评论标签:  

3条评论
  1. scd113 说:

    其实可以通过SQL中的MONTH()函数和group搭配能更容易的实现。不需要程序去转一次。一句就搞定了。可以翻翻。

  2. 麦鸡 说:

    以后要多多偷看别人的代码了!

  3. afei21 说:

    谢谢,受益匪浅

发表评论

(发广告、垃圾评论者请慎重,点击左边按钮可能会造成下半身永久性创伤)