Jigal van Hemert wrote:
Nick Sinclair wrote:
"[.] WHERE date_format(timestamp, '%Y-%m-%d %T')
<=DATE_SUB(CURDATE(),INTERVAL $BLACKLIST_DECAY HOUR)"
* ...It only resolves to the DAY and not an hourly resolution. I have
included a script below that I use for debugging, the MySQL
functionality is taken directly from one of the larger scripts in my
package. This is apparent, as the only time any entries are removed,
is once a day, as the number of hours is "rounded off" to a day, and
I can see this relected in the logs. Also, FYI, the
"$BLACKLIST_DECAY" variable from the sourced config file is in "hours".
I don't know the type of the field "timestamp", but I suspect that the
following will work better and faster:
WHERE `timestamp` <= NOW() - INTERVAL $BLACKLIST_DECAY HOUR;
CURDATE() gives you a 'timestamp' of the beginning of today (only date
part with time part as 00:00:00)
NOW() gives you a 'timestamp' of this moment (including time part)
The MySQL optimizer will see that the expression after the <= is a
constant and will produce a fast query (instead of calculating the
DATE_FORMAT() for each row in de table) which can use an index.
Regards, Jigal.
Thanks Jigal, all works great - You are *so* right.