Beste users, wij zijn bezig met het maken van een web-based applicatie in php5, het is een applicatie waarbij meerdere mensen aan een case moeten werken. alles gaat goed tot dat we nu bij het punt komen dat er een overzicht moet zijn welke users er online zijn. Hoe gaan we dit aanpakken? Het moet dus weergeven WIE er online zijn, niet persee hoeveel. mvg oink
Hey Tim,

ik heb in mijn database een veld staan Laatstonline (DATETIME) en deze update ik op elke pagina waar de members komen. (wel met wat controle etc..)

dan om te kijken wie online is doe ik dit:

<?php
$sql = mysql_query("SELECT Naam FROM members WHERE UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(Laatstonline) < 300 ORDER BY Naam") or die(mysql_error());
?>
Zo krijg ik alle members die de laatste 5 minuten wat gedaaan hebbe,n op de site.
Maar als ik het goed zie, als een member wat doet voegt dat een regel toe aan de database, wordt deze dan niet enorm op den duur?
de database moet dan geupdate worden, niets aan toevoegen. Het is een extra veld in de table met users..
ik heb de tabel genaamd members en ik doe dus op elke pagina
<?php
if(isset($_SESSION['Naam']))
{
$updat = mysql_query("UPDATE members SET Laatstonline = NOW() WHERE Naam = '".mysql_real_escape_string($_SESSION['Naam'])."'") or die(mysql_error());
}
?>
Tim van Lieshout schreef op 26.09.2006 11:19
Maar als ik het goed zie, als een member wat doet voegt dat een regel toe aan de database, wordt deze dan niet enorm op den duur?


En als dat zo zou zijn wat dan nog!
Had hij maar geen database moeten worden :)
@Niels:
Waarom dit terwijl het een datetime is?:
WHERE UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(Laatstonline) < 300

Kan het toch beter zo:
WHERE laatstonline < DATE_SUB(NOW(), INTERVAL 5 MINUTE)

[edit]
Je kan trouwens ook gewoon na 5 minuten het veld laten verwijderen, en dan kijken wie er echt in de database staan, die zijn dan online.

mysql_query("DELETE FROM online WHERE laatstonline < DATE_SUB(NOW(), INTERVAL 5 MINUTE)");
[/edit]
300 seconden is 6 minuten hoors;)

<?php

mysql_query("SELECT id, naam, datum_aangemeld,laatst_online, CASE WHEN UNIX_TIMESTAMP(now())-UNIX_TIMESTAMP(online) > 180 THEN 'nee' ELSE 'ja' END AS l_online FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());

?>

Dit is mijn sql query:)

GR. mebus
Maar dan maak je van een datetime eerst een unix_timestamp. Terwijl je het ook gewoon met date_sub en interval kunt doen. Lijkt het laatste me toch makkelijker. Anders kan je net zo goed de data gelijk in unix_timestamp opslaan.
mebus schreef op 26.09.2006 13:35
300 seconden is 6 minuten hoors;)


GR. mebus


SINDS wanneer?
Oja 360 seconden is 6 minuten dommu dommu ik srry:p:(

edit: en anders is het nog geen 5 minuten maar 4 minuten en 59 seconden want < 300 is 299 seconden en lager:)

of zit ik nu weer fout?

Reageren