OnlineModel::dostatus PHP Méthode

dostatus() public méthode

执行统计
public dostatus ( )
    public function dostatus()
    {
        // 获取最大ID
        $sql = 'SELECT MAX(id) AS max_id FROM ' . C('DB_PREFIX') . 'online_logs WHERE statsed = 0';
        $max_id = $this->odb->query($sql);
        $max_id = @$max_id['0']['max_id'];
        if (empty($max_id)) {
            return false;
        } else {
            $sql = 'UPDATE ' . C('DB_PREFIX') . "online_logs SET statsed = 1 WHERE id < {$max_id}";
            $this->odb->execute($sql);
        }
        // 开始统计
        // TODO:需要计划任务支持移动上一日数据到备份表,现在在每次统计之后备份今天之前的数据到备份表
        // 从logs累计总的用户数,总的游客数到stats表
        $userDataSql = 'SELECT COUNT(1) AS pv, COUNT(DISTINCT uid) AS pu, COUNT(ip) AS guestpu, `day`, isGuest 
						FROM `' . C('DB_PREFIX') . "online_logs`\n\t\t\t\t\t\tWHERE id <= {$max_id}\n\t\t\t\t\t\tGROUP BY day, isGuest";
        $userData = $this->odb->query($userDataSql);
        if (!empty($userData)) {
            $upData = array();
            foreach ($userData as $v) {
                if ($v['isGuest'] == 0) {
                    // 注册用户
                    $upData[$v['day']]['total_users'] = $v['pu'];
                    $upData[$v['day']]['total_pageviews'] += $v['pv'];
                } else {
                    // 游客
                    $upData[$v['day']]['total_guests'] = $v['guestpu'];
                    $upData[$v['day']]['total_pageviews'] += $v['pv'];
                }
            }
            foreach ($upData as $k => $v) {
                $sql = 'SELECT id FROM ' . C('DB_PREFIX') . "online_stats WHERE day = '{$k}'";
                $issetRow = $this->odb->query($sql);
                if (empty($issetRow)) {
                    $sql = 'INSERT INTO ' . C('DB_PREFIX') . "online_stats (`day`,`total_users`,`total_guests`,`total_pageviews`) \n\t\t\t\t\t\t\t VALUES ('{$k}','{$v['total_users']}','{$v['total_guests']}','{$v['total_pageviews']}')";
                } else {
                    $sql = ' UPDATE ' . C('DB_PREFIX') . "online_stats \n\t\t\t\t\t\t\t SET total_users = '{$v['total_users']}',\n\t\t\t\t\t\t\t total_guests = '{$v['total_guests']}',\n\t\t\t\t\t\t\t total_pageviews = {$v['total_pageviews']}\n\t\t\t\t\t\t\t WHERE day = '{$k}'";
                }
                $this->odb->execute($sql);
            }
        }
        // 从online表统计在线用户到most_onine_user表
        $this->checkOnline();
        // 将logs表中今天之前的的数据移动到bak表
        $sql = 'INSERT INTO ' . C('DB_PREFIX') . 'online_logs_bak SELECT * FROM `' . C('DB_PREFIX') . "online_logs` WHERE day <='" . date('Y-m-d', strtotime('-1 day')) . "'";
        $this->odb->execute($sql);
        // 删除logs表中今天之前的数据删除
        $sql = ' DELETE FROM `' . C('DB_PREFIX') . "online_logs` WHERE day <='" . date('Y-m-d', strtotime('-1 day')) . "'";
        // 统计结束
        $this->odb->execute($sql);
    }