www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/counter.fun.php
<?php !defined('M_COM') && exit('No Permission'); function recent2main(){//每天自动更新,将30天内各文档的月统计与周统计记录汇总到文档的archive_rec的表中,将30天之前的记录清除。 global $db,$tblprefix,$timestamp,$monthstats,$weekstats; @set_time_limit(1000); @ignore_user_abort(TRUE); $curdate = date('Ymd',$timestamp);//当天日期字串 if(empty($monthstats) && empty($weekstats)) return; if($db->result_one("SELECT count(*) FROM {$tblprefix}arecents WHERE vardate='$curdate'")) return;//当天的记录已经处理过了。 $mstatarr = empty($monthstats) ? array() : array_filter(explode(',',$monthstats)); $wstatarr = empty($weekstats) ? array() : array_filter(explode(',',$weekstats)); $rperiod = $mstatarr ? 30 : 7; $mindate = $curdate - $rperiod + 1; $db->query("DELETE FROM {$tblprefix}arecents WHERE vardate<$mindate OR vardate>$curdate", 'UNBUFFERED');//清除日记录表中的无效日的记录 //文档记录中的原记录清空 $setstr = $wherestr = ''; foreach($mstatarr as $k){ $setstr .= ($setstr ? ',' : '')."m$k=0"; $wherestr .= ($wherestr ? ' OR ' : '')."m$k != 0"; } foreach($wstatarr as $k){ $setstr .= ($setstr ? ',' : '')."w$k=0"; $wherestr .= ($wherestr ? ' OR ' : '')."w$k != 0"; } $db->query("UPDATE {$tblprefix}archives_rec SET $setstr WHERE $wherestr", 'UNBUFFERED'); if($mstatarr){//更新月记录 $selectstr = 'aid'; foreach($mstatarr as $k) $selectstr .= ",SUM($k) AS m$k"; $query = $db->query("SELECT $selectstr FROM {$tblprefix}arecents GROUP BY aid"); while($item = $db->fetch_array($query)){ $setstr = ''; foreach($mstatarr as $k) $setstr .= ($setstr ? ',' : '')."m$k=".$item['m'.$k]; $db->query("UPDATE {$tblprefix}archives_rec SET $setstr WHERE aid=$item[aid]", 'UNBUFFERED'); } } if($wstatarr){//更新周记录 $selectstr = 'aid'; foreach($wstatarr as $k) $selectstr .= ",SUM($k) AS w$k"; $mindate = $curdate - 7; $query = $db->query("SELECT $selectstr FROM {$tblprefix}arecents WHERE vardate>$mindate GROUP BY aid"); while($item = $db->fetch_array($query)){ $setstr = ''; foreach($wstatarr as $k) $setstr .= ($setstr ? ',' : '')."w$k=".$item['w'.$k]; $db->query("UPDATE {$tblprefix}archives_rec SET $setstr WHERE aid=$item[aid]", 'UNBUFFERED'); } } } function album_statsum(){//固定时间间隔统计合辑内的各种统计数据的合计//由文档统计的动作来触发这个函数 global $db,$tblprefix,$timestamp,$albumstats,$albumstatcircle,$aaltypes; $cachetimefile = M_ROOT.'./dynamic/stats/albumsum_time.cac'; if(empty($albumstats) || ($timestamp - @filemtime($cachetimefile) < $albumstatcircle * 3600)) return; $statarr = array_filter(explode(',',$albumstats)); if(!$statarr) return; $atids = array(); load_cache('aaltypes'); foreach($aaltypes as $k => $v){ $v = read_cache('altype',$k,'',$v['sid']); $v['statsum'] && $atids[] = $k; } if(!$atids) return; @set_time_limit(1000); @ignore_user_abort(TRUE); $selectstr = 'b.pid'; foreach($statarr as $k) $selectstr .= ",SUM(a.$k) AS a$k"; $query = $db->query("SELECT $selectstr FROM {$tblprefix}albums AS b LEFT JOIN {$tblprefix}archives AS a ON a.aid=b.aid WHERE a.checked=1 AND b.checked=1 AND b.patid IN (".mimplode($atids).") GROUP BY b.pid"); while($item = $db->fetch_array($query)){ $setstr = ''; foreach($statarr as $k) $setstr .= ($setstr ? ',' : '')."a$k=".$item["a$k"]; $db->query("UPDATE {$tblprefix}archives_rec SET $setstr WHERE aid=$item[pid]", 'UNBUFFERED'); } if(@$fp = fopen($cachetimefile,'w')) fclose($fp); return; } ?>