Onlinezeit - die SQL-Abfrage

tattva

Grünschnabel
Hallöchen!

Also ich speichere in einer Tabelle, wann sich die User einloggen und auch explizit selbst ausloggen. Nun möchte ich das auswerten und die jeweiligen Onlinezeiten wissen.

Ich habe auch schon eine SQL-Abfrage fabriziert, die mir einigermaßen richtig erscheint. Allerdings eben nur einigermaßen. Ich möchte die Onlinezeit in Stunden und Minuten aus der Abfrage herausbekommen, aber ich glaube dass das mit dieser Abfrage nicht der Fall ist, wenn ich mir die Ergebnisse so anschaue.... :confused:

Code:
SELECT COUNT( * ) AS userNum, (FROM_UNIXTIME( logout_time - login_time, '%H:%i' )) AS onlineTime 
FROM sessions
WHERE `explicit_logout` = '1' AND DATE_FORMAT( FROM_UNIXTIME( login_time ) , '%Y-%m' ) 
BETWEEN DATE_SUB( CURDATE( ) , INTERVAL 6 MONTH )
AND DATE_FORMAT( FROM_UNIXTIME( UNIX_TIMESTAMP( ) ) , '%Y-%m-%d' ) 
GROUP BY onlineTime LIMIT 0 , 30

Weiß jemand, wie ich das richtig mache? Ich hab da noch so ein bißchen meine Probleme mit Unix-Timestamp und das so umzurechnen, dass ich das kriege, was ich will!

Thanx im Voraus :-)
 
Ich benutze mysql und ein einfaches Beispiel für eine Abfrage nach der Zeit wäre:

PHP:
SELECT DATE_FORMAT(datum, '%H:%i') as zeit

Wie ich sehe, hast Du das auch schon benutzt, allerdings beim Select von onlineTime vergessen.

Interessant wäre jetzt eigentlich, was Du für eine Fehlermeldung erhälst. Und wenn Du sonst nicht weiter kommst, würd ich Dir empfehlen, das Statement langsam aufzubauen. Also vielleicht erstmal n Select wie von mir als Beispiel genannt und dann schrittweise erweitern. Auf diese Weise kommst Du auf jeden Fall leichter hinter den Fehler!
 
Hmm, also ich kriege kein Fehlermeldung, sondern ich weiß, dass das Ergebnis, das ich rauskriege nicht stimmen kann.

Zum Beispiel habe ich eine Loginzeit von 11.29 und eine Logoutzeit von 11:38. nach meiner Abfrage steht dann da, dass das eine Onlinedauer von 1 Stunde und 9 Minuten wäre. Also irgendwas kann an dem Part hier nicht ganz stimmen:

Code:
(FROM_UNIXTIME( logout_time - login_time, '%H:%i:%s' )) AS onlineTime

Beim testen habe ich rausgefunden, dass wenn man "%H" für die Stunden angibt, er das automatisch immer auf Eins setzt, auch wenn der User weniger als eine Stunde online war. Wenn ich also schreibe

Code:
(FROM_UNIXTIME( logout_time - login_time, '%i:%s' )) AS onlineTime
dann stimmt's wieder. Und wenn einer weniger als eine Minute online war, setzt er das komischerweise dann aber auf Null und zeigt z.B. 00:27 an.

Also ich verstehe das nicht so wirklich. Wenn da jemand anders Bescheid weiß, wäre das toll.

Ansonsten lass ich mir als Ergebnis einfach nur Unixtime rausgeben und rechne es dann eben später in PHP um. Aber es gibt doch bestimmt was Schöneres da draußen
;)
 
Ich hab es doch noch selbst rausgefunden. Was man so findet, wenn man ewig im Manual stöbert....:suchen:

Anstatt
Code:
SELECT COUNT( * ) AS userNum, (FROM_UNIXTIME( logout_time - login_time, '%H:%i' )) AS onlineTime

schreibt man ganz einfach


Code:
 SELECT COUNT( * ) AS userNum, SEC_TO_TIME ( logout_time - login_time) AS onlineTime

SEC_TO_TIME gibt mir die Sekunden, die ich aus der Subtraktion in der Klammer habe (logouttime und logintime sind Timestamps), als Wert im 'HH:MM:SS'-Format zurück. Genau das was ich brauchte! :-)
 
Zurück