Fabienne: Fehler in MySQL Abfrage?

Hallo Leute,

ich versuche gerade herauszufinden, ob eine User innerhalb der letzten 1000sec eingeloggt war...

SELECT irgendwas FROM users WHERE (UNIX_TIMESTAMP(last_login) > ( UNIX_TIMESTAMP() - 1000 )) AND id='DIE_USER_ID'

Wo steckt mein Fehler?

Thanx an Alle!

  1. Moin,

    SELECT irgendwas FROM users WHERE (UNIX_TIMESTAMP(last_login) > ( UNIX_TIMESTAMP() - 1000 )) AND id='DIE_USER_ID'

    Versuche es mal mit NOW(). Also

    SELECT irgendwas FROM users WHERE (UNIX_TIMESTAMP(last_login) > ( NOW() - 1000 )) AND id='DIE_USER_ID'

    Siehe auch http://dev.mysql.com/doc/mysql/de/date-and-time-functions.html

    SteBu

    1. Hallo,

      Versuche es mal mit NOW(). Also
      SELECT irgendwas FROM users WHERE (UNIX_TIMESTAMP(last_login) > ( NOW() - 1000 )) AND id='DIE_USER_ID'

      NOW() gibt mir aber keinen Timestamp zurück. Ich rechne aber mit Timestamps und checke, wie viele Sekunden vergangen sind....

      Grüße

  2. Wird denn ein Fehler ausgegeben, oder einfach gar nichts?
    In welchem Format wird last_login gespeichert?

    1. Hi,

      Wird denn ein Fehler ausgegeben, oder einfach gar nichts?

      Nein. Es kommt nur das falsche Ergebnis dabei raus.....

      » In welchem Format wird last_login gespeichert?
      Im DateTime-Format (2005-06-01 10:51:00)

      Grüße

  3. Hallo nochmals:

    Nachtrag:

    SELECT irgendwas FROM users WHERE (UNIX_TIMESTAMP(last_login) > ( UNIX_TIMESTAMP() - 1000 )) AND id='DIE_USER_ID'

    Ich will nur "irgendwas" erhalten, wenn der User NICHT innerhalb der letzten 1000sec eingeloggt war.
    Dannach frage ich ab, ob ich "irgendwas" zurückbekommen habe. Anhand dieser Abfrage gebe ich dann eine Meldung raus ("Du wars schon lange nicht mehr hier....")

    Grüße

    1. Tag Fabienne.

      SELECT irgendwas FROM users WHERE (UNIX_TIMESTAMP(last_login) > ( UNIX_TIMESTAMP() - 1000 )) AND id='DIE_USER_ID'
      Ich will nur "irgendwas" erhalten, wenn der User NICHT innerhalb der letzten 1000sec eingeloggt war.

      Dann wäre der Vergleich aber falsch rum formuliert:

      SELECT spalten FROM tabelle WHERE (UNIX_TIMESTAMP(last_login)<(UNIX_TIMESTAMP()-1000)) AND id=user_id

      Zur Verdeutlichung (aus mySQL-Handbuch, Kap. 7.3.4):

      UNIX_TIMESTAMP('1997-10-04 22:23:00' => 875996580 (A)
      UNIX_TIMESTAMP()-1000                => 882225357 (B)

      Dein Vergleich "A>B" liefert falsch, er soll aber wahr sein (es sind ja mehr als 1000 Sekunden vergangen). Somit müsste er "A<B" lauten.

      Siechfred

      1. Hi,

        Dann wäre der Vergleich aber falsch rum formuliert:

        da is was dran...

        SELECT spalten FROM tabelle WHERE (UNIX_TIMESTAMP(last_login)<(UNIX_TIMESTAMP()-1000)) AND id=user_id
        Dein Vergleich "A>B" liefert falsch, er soll aber wahr sein (es sind ja mehr als 1000 Sekunden vergangen). Somit müsste er "A<B" lauten.

        Siehst Du. Genau das hab ich gesucht. Da stand ich selbst auf der Leitung!

        Grüße und Vielen Dank!