Онайн-гости и потребители

MontefuckeR

Registered
Понеже си направих един скрипт да намеря колко гости са в сайта (броика) и колко потребители са в сайта (усернаме)
трябва да стане нещо такова:
  • Гости *
    Потребители:
    Първи
    Втори
    ...
    ..
    .
    Десети
Аз го направих обаче с много заявки...так не ме устройва!
Искам с максимално най-малко заявки!

Таблица users
полета: username,timestamp

Таблица guests
полета: ip,data

Които ми измисли най-добрия и оптимизиран вариянт ще го черпа :)
 
Мене ми трябваше специално за гостите , и скоро си писах нещо такова - ако ти хареса това , ти го давам направо , ако не можеш/искаш да го преправяш мога и да си поиграя за твоята таблица и нужди.
Код:
<?php
ob_start();
session_start();
mysql_connect("****","****","****")or die(mysql_error());
mysql_select_db("****")or die(mysql_error());
if(!isset($_SESSION['user'])){
	 $ip = $_SERVER['REMOTE_ADDR'];
	 $time = time();
	 $sql = mysql_query("SELECT ip FROM active_guests WHERE ip='$ip'");
	 if(mysql_num_rows($sql) > 0){	 
	     mysql_query("UPDATE active_guests SET timestamp='$time' WHERE ip='$ip'")or die(mysql_error());
	 }
     else{		 
		 mysql_query("INSERT INTO active_guests (`id`,`ip`,`timestamp`) VALUES ('NULL','$ip','$time')");
	 }
}	
else{
	 $user = $_SESSION['user'];
	 $time = time();
	 mysql_query("INSERT INTO active_users (`id`,`user`,`timestamp`) VALUES ('NULL','$user','$time')")or die(mysql_error());
}
$time = time()-60;
$sqlA = mysql_result(mysql_query("SELECT COUNT(id) FROM active_users WHERE timestamp > $time"),0);
$sqlB = mysql_result(mysql_query("SELECT COUNT(id) FROM active_guests WHERE timestamp > $time"),0);
$sqlC = mysql_query("SELECT * FROM active_guests WHERE timestamp > $time");
$i = "1";
while($ip = mysql_fetch_array($sqlC)){
	 echo " $i » $ip[ip] <br /> ";
}	 
echo " Потребители онлайн: $sqlA <br /> Гости онлайн: $sqlB <br />";
?>
 
То по принцип не е голяма играчка ,
1) Гисти (тука заявката WHERE timestamp > $time)
2) Потребители (тук заявката , където WHERE timestamp > $time LIMIT 10)
3) Един цикъл
while($row = mysql_fetch_array(2-рата заявка)){
echo "=> $row[username] <br />";
}


Дотука 3 заявки :)
 
Не съм сигурен дали преформих всичко вярно , но ето ти един вариант ->
Код:
<?php
ob_start();
session_start();
mysql_connect("localhost","***","***")or die(mysql_error());
mysql_select_db("***")or die(mysql_error());
if(!isset($_SESSION['user'])){
	 $ip = $_SERVER['REMOTE_ADDR'];
	 $time = time();
	 $sql = mysql_query("SELECT ip FROM active_guests WHERE ip='$ip'");
	 if(mysql_num_rows($sql) > 0){	 
	     mysql_query("UPDATE guests SET data='$time' WHERE ip='$ip'")or die(mysql_error());
	 }
     else{		 
		 mysql_query("INSERT INTO guests (`id`,`ip`,`data`) VALUES ('NULL','$ip','$time')");
	 }
}	
else{
	 $user = $_SESSION['user'];
	 $time = time();
	 mysql_query("INSERT INTO active_users (`id`,`user`,`timestamp`) VALUES ('NULL','$user','$time')")or die(mysql_error());
}
$time = time()-60;
$sqlA = mysql_result(mysql_query("SELECT COUNT(id) FROM users WHERE timestamp > $time"),0);
$sqlB = mysql_result(mysql_query("SELECT COUNT(id) FROM guests WHERE data > $time"),0);
$sqlC = mysql_query("SELECT * FROM users WHERE timestamp > $time");
$i = "1";
echo " Гости онлайн: $sqlB <br /> ";
while($row = mysql_fetch_array($sqlC)){
	 echo "$i » $row[username] <br /> ";$i++;
}	 
?>
 
Не може да е толкова лошо , докато задръстъш MySQL-а много зор ще видиш според мен , просто от разни алтернативи , си мисля , че това е един доста добър вариант , но... ти си знаеш :)
 
Replace каза:
Не може да е толкова лошо , докато задръстъш MySQL-а много зор ще видиш според мен , просто от разни алтернативи , си мисля , че това е един доста добър вариант , но... ти си знаеш :)
ми де да знам може и прав да си :) върши ми работа, а вре гледам сега долу във форума пише колко са били най-много онлайн имаш ли идея за това :shock:
 
Правиш си поле в базата, в което ще записваш колко са били най-много онлайн.
Като всеки път ще проверяваш с един if дали текущата бройка е по-голяма от тази, която е записана в базата и ако е по-голяма да презаписва новия брой потребители върху стария :)
 
иф(броя на регистрираните > последния такъв) Ъпдейтваш таблицата (някаква таблица)
примерно:
Код:
$sql = mysql_fetch_array(mysql_query("SELECT max,date FROM users");
$date = @date('l jS \of F Y h:i:s A');
if($sqlA > $max[max]){mysql_query("UPDATE users SET max='$sql'");mysql_query("UPDATE users SET date='$date'");
echo"Най много $max[date] <br />";
ето ти и SQL-а
Код:
ALTER TABLE users ADD max VARCHAR(20) NOT NULL;
ALTER TABLE users ADD date VARCHAR(20) NOT NULL;

П.П. Не съм го пробвал и не знам колко грешки има :)
 
Аз го направих по следния начин:
Първо взимам бройката на общия брой user-и.След това броя логнати user-и.Вадя от общия брой логнатите и ето ти ги гостите.
 
Това не е ли доста странно :>
Ако имаш 2-ма потребители , от общо 20 , искаш да кажеш ,че в сайта се намират още 18 гости или аз не можах да разбера принципа?
 
най лесно е да направиш UPDATE user и датата днес и след това вадиш всички потребители където lastactive ти е днес :) и след това с mysql_num_rows по същия начин,че да ти отброи колко са били онлайн днес :)
 

Back
Горе