Login- und Logoutzeiten vergleichen
Helmuth
- datenbank
Tach,
ich habe da ein Problem. Ich habe ne Log-Tabelle, in der die Login- und Logoutzeiten von Benutzer stehen.
ID | IDUSER | DATETIME_LOGIN | DATETIME_LOGOUT
--------------------------------------------------------
1 | 8 | 2008-04-10 19:00:13 | 2008-04-10 19:45:23
2 | 8 | 2008-04-10 19:48:16 | 2008-04-10 21:17:03
3 | 8 | 2008-04-11 12:01:33 | 2008-04-11 12:15:13
4 | 8 | 2008-04-12 00:01:38 | 2008-04-12 03:48:16
5 | 8 | 2008-04-13 06:58:54 | 2008-04-13 11:47:23
Ich möchte gerne die Zeiten auswerten. Es gibt hierfür wiederum für diverse Zeiten auch verschiedene Stundensätze. 00:00:00-01:59:59 Uhr gibt es beispielsweise einen Aufschlag. Das Problem ist, dass sich der Benutzer mehrmals am tag einloggt und die Aufschläge im Login-zeitraum liegen kann (siehe ID 4).
Hat jemand ne Idee wie man das errechnen kann?
Hier ist mein Ansatz:
SELECT
SUM( UNIX_TIMESTAMP( l.datetime_logout ) - UNIX_TIMESTAMP( l.datetime_login ) ) AS seconds
FROM login_log AS l
WHERE
l.id_user = 8
AND DATE_FORMAT( l.datetime_login, '%Y.%m.%d' ) = '2008.04.12'
AND DATE_FORMAT( l.datetime_login, '%H%i%s' ) <= '000000'
AND DATE_FORMAT( l.datetime_login, '%H%i%s' ) >= '015959'
AND WEEKDAY( l.datetime_login ) != 5
AND WEEKDAY( l.datetime_login ) != 6
LIMIT 1
Hat jemand da eine einfachere Idee?
yo,
Ich möchte gerne die Zeiten auswerten. Es gibt hierfür wiederum für diverse Zeiten auch verschiedene Stundensätze. 00:00:00-01:59:59 Uhr gibt es beispielsweise einen Aufschlag. Das Problem ist, dass sich der Benutzer mehrmals am tag einloggt und die Aufschläge im Login-zeitraum liegen kann (siehe ID 4).
die fallunterscheidung mit den aufschlägen gehört nicht in die WHERE klausel, sondern in die SELECT klausel (projektion) und du kannst dort mit hilfe von CASE verwzeigen, je nachdem zu welcher zeit du welchen aufschlag haben willst.
Ilja
Hm, schonmal vielen Dank. Aber soweit ich weiss kann man nur CASE "10000" und leider nicht CASE >= "10000" angeben. Selbst wenn, löst es aber auch nicht das Problem, dass pro Login verschiedene Aufschläge dazu kommen.
Hast du nen Ansatz für mich?
Schomma Danke
Helmuth
yo,
Ich möchte gerne die Zeiten auswerten. Es gibt hierfür wiederum für diverse Zeiten auch verschiedene Stundensätze. 00:00:00-01:59:59 Uhr gibt es beispielsweise einen Aufschlag. Das Problem ist, dass sich der Benutzer mehrmals am tag einloggt und die Aufschläge im Login-zeitraum liegen kann (siehe ID 4).
die fallunterscheidung mit den aufschlägen gehört nicht in die WHERE klausel, sondern in die SELECT klausel (projektion) und du kannst dort mit hilfe von CASE verwzeigen, je nachdem zu welcher zeit du welchen aufschlag haben willst.
Ilja
yo,
Hm, schonmal vielen Dank. Aber soweit ich weiss kann man nur CASE "10000" und leider nicht CASE >= "10000" angeben.
dann bist du darüber wohl falsch informiert, mysql (welches du wohl verwendest, in welcher version weiss ich nicht) und andere dbms können das.
SELECT
CASE
WHEN hier_deine_bedingung_für_aufschlag1
THEN aufschlag1
WHEN hier_deine_bedingung_für_aufschlag2
THEN aufschlag2
.....
ELSE kein_aufschlag
END
FROM .....
Ilja