Ik wilde een query uitvoeren en daarin het verschil in minuten tussen de huidige tijd en de laatst actieve tijd van een member ophalen. Ik had gedacht om dat zo te doen, maar dat werkt niet.
<?
// qry geeft het verschil (in seconden) tussen actieve & huidige tijd terug, indien recent actief binnen 5 minuten (300 seconden)
mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) as sec_online FROM members WHERE sec_online > 300");
<?
// qry geeft het verschil (in seconden) tussen actieve & huidige tijd terug, indien recent actief binnen 5 minuten (300 seconden)
mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) as sec_online FROM members WHERE sec_online > 300");
Waarbij hij het aantal seconden teruggeeft, indien actief in de laatste 5 minuten. Op die manier kan je nog doen wat je wil met je uitvoer.
Wat je ook kan gebruiken (hangt van de situatie af):
<?
// qry geeft het verschil (??m. ??s.) tussen actieve & huidige tijd terug, indien recent actief binnen 5 minuten (300 seconden)
mysql_query("SELECT id, TIME_FORMAT(TIMEDIFF(NOW(),last_online), '%im %ss') as lo FROM members WHERE TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) > 300");
<?
// qry geeft het verschil (??m. ??s.) tussen actieve & huidige tijd terug, indien recent actief binnen 5 minuten (300 seconden)
mysql_query("SELECT id, TIME_FORMAT(TIMEDIFF(NOW(),last_online), '%im %ss') as lo FROM members WHERE TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) > 300");
$qon = mysql_query("SELECT id, DATEDIFF(NOW(), last_login) AS timediff
FROM members WHERE timediff > 900") or die(mysql_error());
$qon=mysql_query("SELECT id, DATEDIFF(NOW(), last_login) AS timediff
FROM members WHERE timediff > 900") or die(mysql_error());
en ik krijg de melding:
Unknown column 'timediff' in 'where clause'
Met die TIME_TO_SEC en TIME_FORMAT kom ik helaas ook niet veel verder.. Ik krijg nog steeds het aantal dagen terug, hoe ik de query ook maak (of ik krijg een error).
<?
$qon = mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) as sec_online FROM members WHERE sec_online > 900") or die(mysql_error());
?>
<?
$qon=mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) as sec_online FROM members WHERE sec_online > 900") or die(mysql_error());
De query die ik nu heb is nagenoeg hetzelfde (alleen andere namen). Ik heb ook exact jou query geprobeerd, maar ik krijg steeds:
Unknown column 'log/sec_online' in 'where clause'.
Idem in PHPMyAdmin. Zonder die 'WHERE' krijg ik wel resultaat.
Mag je geen zelf-aangemaakte velden gebruiken in je WHERE ofzo?
Edit:
Ik kan het zo oplossen:
<?php
include('config.inc.php');
$qon = mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) AS log
FROM members") or die(mysql_error());
while ($res = mysql_fetch_array($qon)) {
if ($res['log'] >= 900) {
$qdel = mysql_query("DELETE FROM online WHERE memid=".$res['id']." ");
}
}
?>
<?php
include('config.inc.php');
$qon=mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) AS log
<?php
include('config.inc.php');
$qon = mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) AS log FROM members WHERE log < 900") or die(mysql_error());
while ($res = mysql_fetch_array($qon)) {
if ($res['log'] >= 900) {
$qdel = mysql_query("DELETE FROM online WHERE memid=".$res['id']." ");
}
}
?>
<?php
include('config.inc.php');
$qon=mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) AS log FROM members WHERE log < 900") or die(mysql_error());
Nee, ik heb niets gedaan. Ik heb letterlijk jou query gekopieerd en geplakt, en toen kreeg ik nog deze melding.
Ik snap er echt de #### niet meer van! Ik dacht dat ik 5.0 draaide, maar ik zie nu in PHPinfo() dat ik 4.1.7 draai (vreemd, want volgens mij heb ik toendertijd toch echt 5.0 geïnstalleerd).
edit: Ik update eerst even mijn MySQL, dan weet ik dadelijk zeker dat ik 5.0 heb..
Als het goed is heb ik nu echt MySQL 5.0 (ik heb 'm zojuist geïnstalleerd), maar PhpInfo() zegt nog steeds bij MySQL:
Client API version 4.1.7
Maarja, eerst even jou query proberen.
<?
$qon = mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) AS log FROM members WHERE TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) < 900") or die(mysql_error());
?>
<?
$qon=mysql_query("SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) AS log FROM members WHERE TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) < 900") or die(mysql_error());
Die werkt in ieder geval. Ik ga zorgen dat ik zeker MySQL 5.0 hier draai, en dan nog een keer proberen met die WHERE log > 900.
Vage shit! Ik heb zojuist MySQL gedeïnstalleerd, en MySQL 5.0.27 geïnstalleerd (vers gedownload van mysql.com). Toch geeft PhpInfo aan dat de Client API Version 4.1.7 is. Naja, dat maakt me nog niet zoveel uit. Maar ik krijg die query met die WHERE-clausule niet werkend.
Ik heb een dump gemaakt van mijn database en die dump heb ik op mijn betaalde hosting gezet. Daar krijg ik dezelfde fout als ik die uitvoer in PHPMyAdmin, dus ik denk dat ik ergens een fout heb gemaakt bij het creeeren van mijn tabel..
client api gaat over de module die php heeft op de database aan te spreken, niet over de database zelf.
verder zou dit het truukje moeten doen:
SELECT id, TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) AS log FROM members WHERE TIME_TO_SEC(TIMEDIFF(NOW(), last_login)) < 900