Rol: MySQL: Zeiten subtrahieren oder: Wie zeigte er die Warnings an

Hi,

ich habe folgende MySQL Tabelle:
+--------------+---------+------+-----+---------+----------------+
| Field        | Type    | Null | Key | Default | Extra          |
+--------------+---------+------+-----+---------+----------------+
| id           | int(11) |      | PRI | 0       | auto_increment |
| begin        | time    | YES  |     | NULL    |                |
| end          | time    | YES  |     | NULL    |                |
| diff         | time    | YES  |     | NULL    |                |
+--------------+---------+------+-----+---------+----------------+

und möchte, dass die Differenz zwischen 'begin' und 'end' in 'diff' geschrieben wird:
UPDATE table SET diff=end-begin;
Ergebniss:
Bei manchen Zeilen klappts, bei anderen kommt 'Warnings: 1'.
Zu meiner Schande muss ich gestehen, dass ich mich mit den Warnings meiner MySQL noch garnicht beschäftig habe und jetzt weiss ich nicht einmal wie ich die vollständige Wanrning auslese.

Hat jemand von Euch 'nen Tipp, wie ich
a) zwei Zeiten subtrahiere
und
b) die Warnings richtig auslese ?

Danke,

Rol

  1. UPDATE table SET diff=end-begin;
    Ergebniss:
    Bei manchen Zeilen klappts, bei anderen kommt 'Warnings: 1'.

    Hat jemand von Euch 'nen Tipp, wie ich
    a) zwei Zeiten subtrahiere

    Wenn's einfach mit Minus nicht geht, kannst du die Zeiten zur Not immernoch mit unix_timestamp() in Sekunden umwandeln - die lassen sich garantiert subtrahieren.

    b) die Warnings richtig auslese ?

    Mmh, entweder mysql_error() oder Kapitel 22 der Anleitung, "The MySQL Log Files".

    Gruß,
      soenk.e

    1. Danke erstmal.

      a) zwei Zeiten subtrahiere

      Wenn's einfach mit Minus nicht geht, kannst du die Zeiten zur Not immernoch mit unix_timestamp() in Sekunden umwandeln - die lassen sich garantiert subtrahieren.

      Sowas habe ich gerade gebastelt, ist aber rechtunmständlich da die eigentliche Sache etwas komplexer ist als ich im Posting dargestellt hatte.

      b) die Warnings richtig auslese ?
      Mmh, entweder mysql_error() oder Kapitel 22 der Anleitung, "The MySQL Log Files".

      Wie und wo genau?

      Gruß

      Rol

      1. b) die Warnings richtig auslese ?
        Mmh, entweder mysql_error() oder Kapitel 22 der Anleitung, "The MySQL Log Files".

        Wie und wo genau?

        Wie und wo genau was? Wie und wo genau dein MySQL-Server seine Logs speichert steht im Kapitel 22 der Anleitung, "The MySQL Log Files".

        Gruß,
          soenk.e

        PS: Ok, ich les' mal vor: "All logs can be found in the mysqld database directory." :)

        1. » PS: Ok, ich les' mal vor: "All logs can be found in the mysqld database directory." :)

          Arme Deutschland! Kein deutsches Handbuch ;)

          Marco Strauss

  2. Hallo Rol,

    ich vemute mal dein Problem taucht bei den Einträgeen auf die "über die Mitternachtsgrenze gehen".

    Beispiel:

    begin = 5
    end = 10
    diff = 5

    jedoch:

    begin = 23
    end = 1
    diff = -22

    wenn es das ist, bleibt dir nicht viel anderes über, als die von Söhnke gepostete Lösung oder etwas eigenes "stricken" das diesen Negativwert entsprechen "zurechtbiegt".

    Alles klar? Oder hab ich mich grad arg "vertan"?

    Gruß

    der_bernd

  3. Hallo!

    Hat jemand von Euch 'nen Tipp, wie ich

    a) zwei Zeiten subtrahiere

    Verwende zukünftig anstatt TIME den Spaltentype DATETIME. Mit DATETIME kann man besser rechnen.

    MfG, André Laugks