function getReadNum() {
$result=mysql_query("SELECT read_num, WEEK(NOW())=WEEK(last_read_date) AS is_this_week FROM table WHERE XXXX");
$result=mysql_fetch_array($result);
if($result) {
if($result['is_this_week']) {
return $result['read_num'];
}else {
mysql_query("UPDATE table SET read_num=0, last_read_date=NOW() WHERE XXXX");
return 0;
}
}else {
//add something

}
}
瞎写的,应该差不多
或者写个每周一零点零分零秒执行的脚本

解决方案 »

  1.   

    每周一零点零分零秒初始化这个每周的点击数最好了。如何使程序在每周一零点零分零秒执行呢?PHP可以做到嘛?
      

  2.   

    有一个可以用的方法每次有用户建立联结之后,启用初始化程序。使用时间函数得到日期,得到现在服务器的时间,如果为星期一,执行php的程序。程序中设置一个函数,这个函数是在服务器上生成一个文件的,不用管什么样的名称,只要固定就可以了,而且可以不用加入任何的数据。检测上面简历的那个文件是不是存在,存在就执行清零程序,清零程序中写入执行这个程序的时间。下次有人连理连接之后,如果时间是星期一,调用这个程序的时候,读出上次存储的时间,时间比现在的时间长于7天,就执行清零程序
      

  3.   

    /*
    $id: 所要检查的文章的ID
    $lastUpdateDate: 上次更新每周阅读量的时间 uinux stamp
    */
    function cfmReadNum($id) {
    global $lastUpdateDate;
    $timeNow = time();
    $pastTime = $timeNow-$lastUpdateDate;
    if ($pastTime >= 604800 || date("w",$timeNow)==1){ //如果超过7天,或此时是星期一,则更新
    mysql_query("UPDATE table SET week_read_num=0, last_update_date='$timeNow' WHERE id=$id");
    return 1;
    }else 
    return 0;
    }通过上面的函数就可以完成功能,在没有增加查询.
    可以再添加一句
    if (cfmReadNum($id)) $artical['week_read_num']==0;
    把浏览次数更新过的文章的本周浏览次数重新赋值.
      

  4.   

    如果得到精确的值必须每次调用都要检查是否是该周第一次调用,这个是必须的,要么从文件要么从数据库,两个效率哪个更高我不知道,但你的记录数可能很多,每个记录都对应一个最后的更新时间,我觉得用数据库更合理。楼上的和我给你的算法都差不多,都有点小毛病,我的算法WEEK(NOW())后边应该改成>=。还有在第二个查询的地方把read_num=0改成read_num=1,同样后边的return 0改正return 1。楼上的是少了个查询,但$lastUpdateDate咋变出来的,效率都差不多如果你想在每个周一零点零分零妙初始化所有的读取次数cron任务,如果是windows,做个计划任务就完了,php不可能自己定时执行的