tags:

views:

57

answers:

3

Hi, I have a mysql table that I need to only contain 20 newest records before adding additional records. New rows are added daily so I would like it first delete any records that are greater than the 20 allowed starting with the earliest.

The table contains an auto increment "id" column so I can easily determine which is the earliest records.

Thanks for any help.

+1  A: 

Use DELETE with ORDER BY and LIMIT:

DELETE FROM MyTable
ORDER BY MyTable.id DESCENDING
LIMIT 20,18446744073709551615;

This will leave the 20 records with the largest id and delete the rest.

lc
Numbers don't get any _more_ magic than 18446744073709551615 :-)
paxdiablo
+2  A: 

You can specify an offset with the LIMIT keyword in your query so the newest 20 rows are kept. According to MySQL's documentation, however, there's no easy way to limit from an offset all the way to the last; instead, they suggest this:

To retrieve all rows from a certain offset up to the end of the result set, you can use some large number for the second parameter.

So this SQL should do the trick:

DELETE FROM table ORDER BY id DESC LIMIT 20, 18446744073709551615;
BoltClock
This will work great, thanks
joseph
A: 

Why not to leave all records untouched?
That's the database were invented for. If you want to keep only newest data, you've probably need another storage, like memcache

Col. Shrapnel
The records kept in that table are temporary so I only need it to keep the last 20 records to use as a comparison with the new data.
joseph