Alex: & (mySQL) 2 Timestamps setzen und später einen aktualisieren

Hallo!

Ich würde gerne in einer Tabelle zwei Timestamps setzen: einen, wann die Daten erstellt wurden und einen, wann sie das letzte mal aktualisiert wurden.
Nun wird beim erstellen von neuen Daten nur der erste gesetzt, der zweite bleibt bei 00000000000000. Kann man nur einen Timestamp setzten? Und wenn das im Prinzip schon geht: wie kann ich beim aktualisieren der Daten nur den zweiten Timestamp aktualisieren?
Oder: gibt es eine bessere Lösung für dieses Problem?

Danke & Grüße: Alex

  1. Hallo,

    ich bin mir nicht sicher, ob ein Feld vom Typ Timestamp direkt automatisch gefüllt wird. Ich glaube nur  bei Attribut NULL.
    Beim editiren musst du wohl den timestamp in php-erzeugen und von hand ins feld eintragen.

    Odium

  2. Moin!

    Ich würde gerne in einer Tabelle zwei Timestamps setzen: einen, wann die Daten erstellt wurden und einen, wann sie das letzte mal aktualisiert wurden.

    Wie machst du das bis jetzt? Welche Datentypen haben die Timestamps?

    Nun wird beim erstellen von neuen Daten nur der erste gesetzt, der zweite bleibt bei 00000000000000. Kann man nur einen Timestamp setzten? Und wenn das im Prinzip schon geht: wie kann ich beim aktualisieren der Daten nur den zweiten Timestamp aktualisieren?

    Üblicherweise werden Daten mit "UPDATE" aktualisiert. Und warum sollte sowas nicht gehen:
    UPDATE tabelle SET timestamp2=NOW() WHERE eintrag_richtig;

    - Sven Rautenberg

    1. ...nochmal Hallo!

      Üblicherweise werden Daten mit "UPDATE" aktualisiert. Und warum sollte sowas nicht gehen:
      UPDATE tabelle SET timestamp2=NOW() WHERE eintrag_richtig;

      ...O.K., das funktioniert schon mal (damit der erste timestamp bleibt, muss ich SET timestamp1 = timestamp1 schreiben!?).
      Wenn ich aber einen neuen Eintrag mache, wird wie gesagt, nur der erste automatisch gesetzt, der zweite nicht.

      Grüße: Alex

      1. Yo!

        ...O.K., das funktioniert schon mal (damit der erste timestamp bleibt, muss ich SET timestamp1 = timestamp1 schreiben!?).

        Nein. Es werden bei UPDATE alle Einträge gesucht, auf die das WHERE paßt, und bei denen wird die Aktion im SET durchgeführt. Wenn du eine Spalte mit neuem Inhalt füllen willst, gib die Spalte und den neuen Inhalt an. NOW() ist übrigens eine MySQL-Funktion, die den aktuellen Zeitpunkt ausgibt. Das ist für verschiedene UPDATE-Aufrufe nicht immer derselbe Zeitpunkt - aber für ein Aktualisierungsdatum macht das durchaus Sinn.

        PS: Wenn du beispielsweise eine Zugriffszahl hast und die erhöhen willst, geht auch eine Rechnung im Update:
        UPDATE tabelle SET counter=counter+1 WHERE downloadID=23;

        UPDATE kann sehr viel. ;)

        Wenn ich aber einen neuen Eintrag mache, wird wie gesagt, nur der erste automatisch gesetzt, der zweite nicht.

        Wie fügst du einen neuen Eintrag hinzu?

        INSERT INTO tabelle (timestamp1, timestamp2, rest) VALUES (NOW(), NOW(), 'ein string und so weiter');

        Sollte doch ebenfalls funktionieren. Auf Automatiken verlasse ich mich nur ungern - es sei denn, es dreht sich um auto_increment. :)

        - Sven Rautenberg

        1. Hallo!

          INSERT INTO tabelle (timestamp1, timestamp2, rest) VALUES (NOW(), NOW(), 'ein string und so weiter');

          ... ich mach da mit dem timestamp gar nichts. Ich dachte timestamp würde sich immer automatisch setzen.

          Ansonsten: Danke! Hat mir weitergeholfen!
          Grüße: Alex

          1. Hi!

            INSERT INTO tabelle (timestamp1, timestamp2, rest) VALUES (NOW(), NOW(), 'ein string und so weiter');

            ... ich mach da mit dem timestamp gar nichts. Ich dachte timestamp würde sich immer automatisch setzen.

            Sven meint einen eigenen Timestamp, nicht den MySQL Spalten-Typ Timestamp, der wird bei Inserts und jedem Update automatisch auktualisiert. Du brauchst lediglich zu diesem eine 2. Spalte in die Du bei Inserts mit now() den aktuellen Zeitpunkt einträgts, udn das Feld sollte dann z.B. ein datetime-Typ sein!

            Grüße
            Andreas

            Ansonsten: Danke! Hat mir weitergeholfen!
            Grüße: Alex

            1. Hi!

              INSERT INTO tabelle (timestamp1, timestamp2, rest) VALUES (NOW(), NOW(), 'ein string und so weiter');

              ... ich mach da mit dem timestamp gar nichts. Ich dachte timestamp würde sich immer automatisch setzen.
              Sven meint einen eigenen Timestamp, nicht den MySQL Spalten-Typ Timestamp, der wird bei Inserts und jedem Update automatisch auktualisiert.

              Nein, eigentlich meinte ich schon ganz genau den Datentyp TIMESTAMP. Nur: Der aktualisiert sich eben nicht immer automatisch. Siehe auch http://www.mysql.com/doc/D/A/DATETIME.html

              Kleiner Auszug:
              "If you have multiple TIMESTAMP columns, only the first one is updated automatically.

              Automatic updating of the first TIMESTAMP column occurs under any of the following conditions:

              • The column is not specified explicitly in an INSERT or LOAD DATA INFILE statement.
              • The column is not specified explicitly in an UPDATE statement and some other column changes value. (Note that an UPDATE that sets a column to the value it already has will not cause the TIMESTAMP column to be updated, because if you set a column to its current value, MySQL ignores the update for efficiency.)
              • You explicitly set the TIMESTAMP column to NULL."

              Du brauchst lediglich zu diesem eine 2. Spalte in die Du bei Inserts mit now() den aktuellen Zeitpunkt einträgts, udn das Feld sollte dann z.B. ein datetime-Typ sein!

              TIMESTAMP-Typ geht auch wunderbar. Nur sollte angesichts der Tatsache, daß nur die erste Spalte automatisch aktualisiert wird (wenn denn überhaupt), vielleicht einfach die Reihenfolge in der Tabelle getauscht werden: Zuerst letzte Aktualisierung, und dann Erstelldatum. ;)

              - Sven Rautenberg