Waarom wil je eigenlijk iedere minuut (dat is de enige manier om altijd up-to-date te blijven) een update-query uitvoeren? Wanneer je gewoon die gebruikers selecteert die de afgelopen 10 minuten iets hebben uitgevoerd, dan zullen de queries een stuk sneller zijn.
Een gebruiker klikt ergens op de site => update van 1 record waarbij je een nieuwe datumtijd-stempel opgeeft
Ophalen van een pagina => select alle gebruikers die de afgelopen 10 minuten een update hebben uitgevoerd.
Het is nu niet meer nodig om ergens een waarde op 1 of 0 te zetten. Gewoon een datumtijdstempel bijwerken bij iedere klik (doe je toch al) en een SELECT uitvoeren met de juiste WHERE. Dit bespaart je een hoop overhead.
Precies! De waarde in 'online' is namelijk een afgeleide van de tijd, de tijd bepaalt of je offline of online bent. Het heeft dan geen toegevoegde waarde om dit gegeven nog een keer op te gaan slaan. Sterker nog, in een goed datamodel sla je gegevens slechts 1x op, jij slaat het nu 2x op.
<?
$query = "
SELECT
*,
CASE
WHEN TIMEDIFF(NOW(), online_tijd) > '00:10:00' THEN 'online'
ELSE 'offline'
END AS online
FROM
users
ORDER BY
gebruikersnaam";
$sql = mysql_query($query) or die (mysql_error());
while($rij = mysql_fetch_assoc($sql))
{
$online = '<img src="images/'.$rij['online'].'.gif" border="0" alt="'.$rij['online'].'">';
}
?>
Laat de database het werk doen met een CASE. Niet getest! END moet je eventueel in END CASE veranderen.
hhmmm..
hij geeft nu online aan maar de online_tijd staat op 2006-11-21 21:54:51
en het is bij mij 22:19
Edit:
Als mboshoven(dat is mijn account) op online gaat dan klopt het wel maar dan gaat F-Flow ook op online en dat klopt niet die moet dan offline blijven want die datum is niet veranderd..