Door
joey brouwer
op 07-01-2014 16:49
gewijzigd op 07-01-2014 16:50
1.486 views
Hallo,
Jullie hebben de vraag misschien al vaker voorbij zien komen, maar ik kon niks vinden.
Ik wil dus een online leden lijst voor mijn site maken, nou heb ik het volgende function gemaakt om mensen die online zijn toe te voegen aan de mysql datebase:
if (mysql_result(mysql_query("SELECT COUNT(`user_id`) FROM `users_online` WHERE `user_id` = '$user_id' "), 0) == 0)
{
mysql_query("INSERT INTO `users_online` (user_id, online, page) VALUES ('$user_id', NOW(), '$page')");
} else {
mysql_query("UPDATE `users_online` SET `online` = NOW(), `page` = '$page' WHERE `user_id` = $user_id");
}
}
?>
Dit werkt allemaal perfect, maar nou moet ik dus als iemand langer als een paar minuten niet op de site zit die persoon uit de users_online tabel gooien. Ik sla datum en tijd op met NOW() zoals jullie kunnen zien. Nou moet ik die tijd dus gaan vergelijken of misschien is er een andere simpelere manier. Ik zou niet weten hoe ik dit aan zou moeten pakken. ben nog maar een beginner. Iemand ideeën?
Kan ik dan beter de tabel users_online laten vervallen en gewoon in de users tabel 2 kolommen toevoegen genaamd online en page?
Mvg joey
[size=xsmall]Toevoeging op 07/01/2014 20:23:10:[/size]
Nog een laatste vraag: Is het erg als ik een functie mee loop net als hier onder, of is het beter om het anders te doen
<?php
$result = mysql_query("SELECT `user_id` FROM `users_online` WHERE online > NOW() - INTERVAL 10 MINUTE");
$num_users = mysql_num_rows($result);
echo '<table> We hebben ' . $num_users . ' leden online.';
while ($row = mysql_fetch_assoc($result)) {
echo '<tr><td>'. username_from_user_id($row['user_id']) .'</td></tr>';
}
echo '</table>';
?>
Als die functie elke keer een query doet om de username te vinden, dan is het efficenter om dat direct in je query te doen. Simpele join.
Je kunt qus caching beter niet steeds in de user tabel rommelen.
die tabel is best wel statisch verder en de data gebruik je regelmatig. Je kunt die dan beter niet steeds aanpassen, zodat mysql ook niet steeds besluit om de hele tabel als veranderd te beschouwen
Nou heb ik dit,(begrijp niet zoveel van die "join query")en ik weet niet hoe ik er nou nog een SELECT COUNT van maak?
@ivo... Uit je onderste stukje versta ik dus dat ik de boel beter apart kan houden en niet zoveel kolommen in users moet maken maar het een beetje moet op delen. (zoals ik het nu dus al deed met users_online)
Als je al de leden die online zijn (bv 5000???) wilt displayen op de pagina, kan je dit natuurlijk dan met een querie ophalen en dan met num_rows het aantal weergeven.
Ivo P op 07/01/2014 20:50:17
Je kunt qus caching beter niet steeds in de user tabel rommelen.
die tabel is best wel statisch verder en de data gebruik je regelmatig. Je kunt die dan beter niet steeds aanpassen, zodat mysql ook niet steeds besluit om de hele tabel als veranderd te beschouwen
Let wel op dat query caching op server niveau gebeurt, en dat alleen bij query's die exact (teken voor teken) hetzelfde zijn het resultaat uit de cache gehaalt wordt.