André Mantz: Mal ´ne Frage zu SQL ... hoffentlich nicht zu OT

Hallo,

ist zwar kein SQL-Forum hier, aber da ich hier immer die schnellsten und besten Antworten bekomme versuch ich es trotzdem mal. Ausserdem handelt es sich ja um ein Web-Projekt :-)

Also, ich habe in einer MySQL-Tabelle eine Spalte mit dem Typ timestamp(14). Es ist eine Tabelle von Usern, die grade auf meiner Seite eingeloggt sind.
Die Spalte enthält den Zeitpunkt der letzten Aktivität des Users. Wer 1800 sek. nicht aktiv war, wird automatisch ausgeloggt. Und hier beginnt mein Problem:

Mit folgendem Statement frage ich nach den Usern, die länger als 1800 sek. nichts getan haben:

SELECT user FROM TABELLE WHERE floor((now()-zuletztaktiv)/100*60) > 1800

erstaunlicherweise liefert mir diese Abfrage auch häufig Zeilen, bei denen die letzte Aktivität wesentlich weniger als 1800 sek zurückliegt. Kann mir jemand sagen, was ich falsch mache?

Danke für Eure Hilfe.

Gruß, André

  1. Hallo!

    Also, ich habe in einer MySQL-Tabelle eine Spalte mit dem Typ timestamp(14).

    Der Type TIMESTAMP hat folgende Form: JJJJMMDDhhmmss

    Also es ist nicht der Unix-Timestamp.

    SELECT user FROM TABELLE WHERE floor((now()-zuletztaktiv)/100*60) > 1800

    Als Ergebnis bekommst Du nicht die Differenz in Sekunden zurück, sondern irgendwas. Du kannst nicht einfach mal 1800 von einer Spalte mit einem Date/Time-Type abziehen. Sind das 1800 Stunden, Sekunden oder Eier?

    SELECT user FROM tabelle WHERE zuletztaktive >= DATE_SUB(NOW(), INTERVAL 1800 SECOND);

    Es wird die aktuelle Zeit minus 1800 Sekunden gerechnet. Ist die Zeit in 'zuletztaktive' größer oder gleich der errechneten Zeit, wird der Datensatz (Spalte 'user') angezeigt.

    MfG, André Laugks
    L-Andre q gmx.de