В общем имеется код модуля "онлайн", который выводит общее количество поситителей, гостей и зарегистрированных пользователей. Код очень грамоздкий, с большим количеством запросов к БД. Возможно ли его оптимизировать?
- Код: Выделить всё • Развернуть
<?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;
}
?>