2009-07-08 6 views
2

Ich muss ein Feld in einer Datenbank behalten und es irgendwie mit einer Zeit aktualisieren, dann muss ich später diese Zeit überprüfen, um zu sehen, ob es vor 30 Minuten war oder nicht, und wenn nicht, wie Minuten bis 30 Uhr ?MySQL: Wie viele Minuten wurde DB aktualisiert?

Ich werde dies mit PHP zu + MySql kann mir jemand sagen, der einfachste Weg, dies zu tun?

Danke !!

+0

Müssen Sie das Datumsfeld jedes Mal aktualisieren, wenn die Datenbank aktualisiert wird, irgendwelche, die auf einer Tabelle eingefügt/aktualisiert/gelöscht werden? –

+0

"ein Feld in einer Datenbank behalten": meinst du "Tabelle" -> prüfen, wenn jeder einzelne Datensatz aktualisiert wurde? Oder meinst du wirklich "letztes Mal, wenn irgendetwas in der Datenbank geändert wurde"? – VolkerK

+0

Ich meine nur Tabelle nicht gesamte Datenbank. –

Antwort

0

Nehmen wir an, Sie möchten wissen, wie lange das letzte Update/Einfügen in der Tabelle vor sich ging.
Sie können eine Tabelle mit einem Zeitstempel-Feld mit einer einrichten auf update-Klausel

CREATE TABLE foo (
    id int auto_increment, 
    ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    primary key(id), 
    key(ts) 
) 

und dann mit dem größten Wert in ts

SELECT 
    TIMEDIFF(Now()-Interval 30 Minute, ts) 
FROM 
    foo 
ORDER BY 
    ts DESC 
LIMIT 
    1 

bearbeiten den Datensatz abfragen: Dies funktioniert auch, wenn Sie wollen um alle Datensätze zu erhalten, die innerhalb von zB die letzten 12 Stunden.

SELECT 
    TIMEDIFF(Now()-Interval 30 Minute, ts) 
FROM 
    foo 
WHERE 
    ts > Now()-Interval 12 hour 
ORDER BY 
    ts DESC 

edit2: es gibt auch eine Off Chance, dass Sie in http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html interessiert sein könnte:

SHOW TABLE STATUS die folgenden Felder zurück:
...
update_time
Wenn die Datendatei zuletzt aktualisiert wurde. Bei einigen Speicher-Engines ist dieser Wert NULL. InnoDB speichert beispielsweise mehrere Tabellen in seinem Tabellenbereich und der Zeitstempel der Datendatei gilt nicht.Für MyISAM wird der Zeitstempel der Datendatei verwendet. Unter Windows wird der Zeitstempel jedoch nicht durch Aktualisierungen aktualisiert, sodass der Wert ungenau ist.

+0

OK, sobald ich den Zeitstempel erhalte, wie kann ich sagen, wie viele Minuten es her war? Vielen Dank! –

+0

Das Ergebnis von timediff() hat das Format 'hh: mm: ss.fractions'. Bei der ersten Abfrage TIMEDIFF (Now() - Interval 30 Minute, ts) hat das Ergebnis ein Minuszeichen, wenn die letzte Insert/Aktualisierung weniger als 30 Minuten zurückliegt. So -05: 00: 00 bedeutet "das letzte Update ist vor 25 Minuten, 5 Minuten bis die 30 Minuten abgelaufen sind". – VolkerK

0

Ich konnte alle wickeln Sie einfügen und aktualisieren MySql ruft in einer Funktion etwas wie folgt aus:

function MySqlQuery($query, $res){ 
    $result = mysql_query($qs, $res); 
    if($result === false){ 
     mysql_query("QUERY STRING TO UPDATE FIELD IN DATABASE WITH NEW TIME", $res); 
    } 
    return $result; 
} 

Ersetzen Sie die "QUERY STRING TO FIELD IN DATABASE WITH NEW TIME Update" mit einem aktuellen Update-Abfrage und Sie sollte gut gehen.

+0

Zu aufdringlich. Es sollte einen saubereren Ansatz geben. –

0

Was ich mache ist, einen Zeitstempel auf die neueste Aufzeichnung zu setzen. Ziehen Sie den neuesten Datensatz mit einer MySQL-Abfrage und verwenden Sie dann die Array-Funktion "mysql fetch", um den Zeitpunkt des letzten Datensatzes abzurufen. Dies gilt auch für die Verwendung einer Datenbank, die nur mit der Uhrzeit aktualisiert wird.

Sie wäre in der Lage, die Zeit mit einer Funktion zu manipulieren, die zur Zeit auf dem Datensatz die aktuelle Zeit vergleicht. Von dort können Sie die Zeit seit dem letzten Posting anzeigen, und wenn es länger als 30 Minuten ist, können Sie eine Nachricht senden.

Lassen Sie mich wissen, wenn Sie Fragen haben. Der obige Code sollte Ihnen eine Vorstellung davon geben, wie es funktionieren würde, aber es ist ein grobes Beispiel.

Best of Luck !!

EDIT :::

Sorry, ich die Frage falsch verstanden, würden Sie müssen noch die Zeit, in die Datenbank einzugeben. Sie können den obigen Code immer noch verwenden, um die Zeit zu ziehen und zu sehen, ob sie länger als 30 Minuten ist oder nicht.

Für den Zeitstempel überprüfen Sie die PHP Time Manual. Sie werden das gleiche Zeitformat für die MySQL-Eingabe und den Code, den ich oben gepostet habe, auswählen wollen.

+0

Sie müssen erwähnen, wie die Zeit erzeugt wird. Schätze, es ist ein Zeitstempel. –

+0

PHP-Zeitstempel daher die PHP-Zeitformatierung, die Sie verwenden möchten. –

Verwandte Themen