Want wat ik hier probeer te bereiken is door de 2 tijden af te trekken te kijken of het verschil meer is dan 180 seconden zo ja dan is het lid offline is ie binnen die 180 seconden dan is online
Dit is een mooie query (dus 1 query) om een CASE toe te passen i.c.m. met de TIMEDIFF. Hier een voorbeeldje die je zelf verder mag uitwerken:
SELECT
CASE
WHEN TIMEDIFF(online, NOW()) > '00:03:00' THEN 'offline'
ELSE 'online'
END
AS status
FROM
tabelnaam
Niet getest en het lijkt me sterk dat deze helemaal goed is, maar met wat testwerk krijg je hem wel werkend. Je krijgt in elk geval de alias 'status' retour en deze kan de waardes 'offline' en 'online' bevatten.
$sql = mysql_query("SELECT id,naam,online,laatst_online FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());
$br = '<br />';
while($row = mysql_fetch_assoc($sql)) {
$br = ($br == '<br />') ? '' : '<br />';
$on = mysql_query("SELECT CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden") or trigger_error(mysql_error());
$wat = mysql_fetch_assoc($on);
Je kunt de controle offline/online direct doen met het ophalen van de gegevens van de gebruikers. Dus met query $sql. Daar moet je de CASE inbouwen en klaar ben je. Scheelt je een hele berg queries die naar de database worden gestuurd, is dus sneller.
Ja oké had al geprobeerd maar lukte niet toen kreeg ik een sql-error:( Ma zal wel weer eens verkeerd hebben aangepast dan zal nog een keertje proberen;)
Tip: Noteer je queries wat netter, dat maakt het een stuk overzichtelijker en eenvoudiger. Zie mijn voorbeeld van die case:
<?php
$query = "
SELECT
CASE
WHEN TIMEDIFF(online, NOW()) > '00:03:00' THEN 'offline'
ELSE 'online'
END
AS status
FROM
tabelnaam
";
$result = mysql_query($query) or die(mysql_error());
?>
Dus de query in een aparte variabele (kun je hem nog eens echoen), over meerdere regels uitgeschreven, laten inspringen en dan mysql_query() deze variabele laten uitvoeren.
$sql = mysql_query("SELECT id,naam,online,laatst_online,CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden leden WHERE geactiveerd = 'ja' AND SUBSTRING(naam,1,1) = '".$letter."'") or trigger_error(mysql_error());
} else {
$sql = mysql_query("SELECT id,naam,online,laatst_online,CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden WHERE geactiveerd = 'ja'") or trigger_error(mysql_error());
$on = mysql_query("SELECT CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status FROM leden") or trigger_error(mysql_error());
$wat = mysql_fetch_assoc($on);
switch($wat['status']) {
case 'ja': $online = '<font color="green"><b>Ja</b></font>'; break;
case 'nee': $online = '<font color="red"><b>Nee</b></font>'; break;
}
Maar nu wil dat als de 2 tijdverschillen tussen now en dia_online ook word vertoont als online is ja of nee
het verschil mag niet groter zijn dan 5 seconden hoe zou ik deze er dan bij kunnen proppen?
want 2 keer dit:
CASE WHEN TIMEDIFF(now(), online) > '00:03:00' THEN 'nee' ELSE 'ja' END AS status
CASE WHEN TIMEDIFF(now(), dia_online) > '00:00:02' THEN 'nee' ELSE 'ja' END AS d_status