Search code examples
phpmysqlphp4

MySQL: How many minutes ago was DB updated?


I need to keep a field in a data-base and update it with a time somehow, then later I need to check that time to see if it was over 30 minutes ago or not, and if not, how minutes left until 30?

I am going to be doing this with PHP+MySql can anyone tell me the simplest way to do this?

Thanks!!


Solution

  • Let's assume you want to know how long ago the last update/insert in the table occurred.
    You can set up a table with a timestamp field with an on update clause

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

    and then query the record with the largest value in ts

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

    edit: This also works if you want to get all records that have been inserted/modified within e.g. the last 12 hours.

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

    edit2: there's also an off chance you might be interested in http://dev.mysql.com/doc/refman/5.1/en/show-table-status.html:

    SHOW TABLE STATUS returns the following fields:
    ...
    Update_time
    When the data file was last updated. For some storage engines, this value is NULL. For example, InnoDB stores multiple tables in its tablespace and the data file timestamp does not apply. For MyISAM, the data file timestamp is used; however, on Windows the timestamp is not updated by updates so the value is inaccurate.