Re: php + mysql - timstamp - calculate hours remaining

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Many Thanks for the help.

OP 2 worked a treat.. now i need to run it at midnight,  I was  going to
write a  php script  and call  it vai  crontab,  but  how could  I iplament
this a  triger and stored procedure ?



On 1/10/06, M. Sokolewicz <tularis@xxxxxxx> wrote:
>
> David Grant wrote:
> > Gregory,
> >
> > David Grant wrote:
> >
> >>Gregory Machin wrote:
> >>
> >>>I have a table with a timestamp column and would like to use his to
> >>>calculate the age of the record . how would i go about this...
> >>>I would also like to exicute a mysql stament that pasess the tables and
> >>>removes fields older than say 72 hours. how would i go about this . ?
> >>
> >>A timestamp is the time in seconds (since Jan 1 1970), so you can
> >>ascertain the age in seconds by subtracting the stored timestamp from
> >>the current timestamp.
> >>
> >>You can find the current timestamp in MySQL using the
> >>CURRENT_TIMESTAMP() function.
> >>
> >>Once you have the age of the record, finding 72 hours is fairly trivial
> >>- 72 hours is 259200 seconds (72hrs * 60mins * 60secs).
> >>
> >>Therefore your query will be:
> >>
> >>DELETE FROM <TABLE> WHERE CURRENT_TIMESTAMP() - <FIELD> > 259200
> >
> >
> > Following Albert's reply, the query ought to read:
> >
> > DELETE FROM <TABLE> WHERE CURRENT_TIMESTAMP() - UNIX_TIMESTAMP(<FIELD> >
> > 259200
> >
> > David
> David, your solution is correct (though you made a typo; it should read:
> "DELETE FROM <TABLE> WHERE CURRENT_TIMESTAMP() - UNIX_TIMESTAMP(<FIELD>)
> > 259200"), though slow because mysql needs to calculate a timestamp,
> based on all the times/dates stored. Now, all these methods depend on
> how the OP stored the dates in his database. In general, there are 2
> ways which are used most often:
> 1 - As a UNIX timestamp (as per Albert's example), or
> 2 - As a MySQL-timestamp (as per ISO 8601; YYYY-MM-DD)
>
> If the OP uses #1 to store the date, the easiest way is to do a
> modification of David's solution, and do:
> "DELETE FROM <TABLE> WHERE <field> < UNIX_TIMESTAMP(NOW())-259200", this
> is a quick solution, because all MySQL now needs to do is compare an
> integer to an integer for each row (which is pretty fast).
> If the OP uses #2, then it's easier to use MySQL's built-in functions
> for date-comparison. It's actually faster than converting the dates to
> UNIX timestamps and comparing them as per #1, so let's do that. To
> achieve this, you can use mysql's own date functions:
> "DELETE FROM <TABLE> WHERE <field> < NOW()- INTERVAL 72 HOUR"
>
> hope this short discussion helped,
> - tul
>



--
Gregory Machin
greg@xxxxxxxxxxxxxx
gregory.machin@xxxxxxxxx
www.linuxpro.co.za
www.exponent.co.za
Web Hosting Solutions
Scalable Linux Solutions
www.iberry.info (support and admin)

+27 72 524 8096

[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux