В общем имеется код модуля "онлайн", который выводит общее количество поситителей, гостей и зарегистрированных пользователей. Код очень грамоздкий, с большим количеством запросов к БД. Возможно ли его оптимизировать?
- Код: Выделить всё • Развернуть
 
<?php
function online() {
    
    $wine = 300; 
    $table_online = "online";
    
    global $lang;
    
    $sql_update = "DELETE FROM ".$table_online." WHERE `unix`+".$wine." < ".time()." OR `ip` = '".$_SERVER['REMOTE_ADDR']."'";
    $result_update = mysql_query($sql_update) or die(mysql_error());
    
    $logid = $_SESSION['logid'];
    if(empty($logid)){
        $logid = 0;
    }
    
    $sql_insert = "INSERT INTO ".$table_online." VALUES (NULL, '".$_SERVER['REMOTE_ADDR']."', '".time()."', '".date('Y-m-d')."', '".date('H:i:s')."', '".$logid."')";
    $result_insert = mysql_query($sql_insert) or die(mysql_error());
    
    $sql_sel = "SELECT `id` FROM ".$table_online;
    $result_sel = mysql_query($sql_sel) or die(mysql_error());
    
    $online_people = mysql_num_rows($result_sel);
    $online_people = (string) $online_people;
    
    $rain = strlen($online_people) - 1;
    
    if($online_people[$rain] == 2||$online_people[$rain] == 3
    ||$online_people[$rain] == 4
    ||(strlen($online_people)!=1&&$online_people[strlen($online_people)-2]!=1))
    
    
    $line = $lang['online']['users']; else $line = $lang['online']['user'];
    
    $gst_sql = 'SELECT count(*) FROM `online` WHERE `log_id` = "0"';
    $gst_res = mysql_query($gst_sql);    
    $gst_row = mysql_fetch_array($gst_res);
    
    $mbr_sql = 'SELECT count(*) FROM online WHERE log_id > "0"';
    $mbr_res = mysql_query($mbr_sql);    
    $mbr_row = mysql_fetch_array($mbr_res);
    $ret =  $lang['online']['now']." <strong>".$online_people."</strong>,\n";
    $ret .= $lang['online']['from'].' '.$gst_row[0].' '.$line.' ';
    $ret .= $lang['online']['and'].' '.$mbr_row[0].' '.$lang['online']['reg_users'];
    
    if(empty($logid)){ $logid = 0; }    
    if($logid == 0){
        $st = $lang['online']['guest'];
    } else {
        $st = $lang['online']['member'];
    }
    
    if($st == $lang['online']['member']){
        $sql = 'SELECT * FROM users WHERE id = "'.$_SESSION['logid'].'"';
        $res = mysql_query($sql);
        $row = mysql_fetch_array($res);
        
        $user['name'] = $row['username'];
        $user['id'] = $row['id'];
        
        $ret .= '<a href="?page=users&action=view-profile&id='.$user['id'].'">'.$row['username'].'</a>,';
    }
    return $ret;
}
?>