所以我们有一个数据库。我们经常会添加一个新数据集,并删除最旧的数据集。
说数据库是6月初:18个记录,6月下旬:15个记录,8月:23个记录。当我们添加下一条记录时,我们要删除6月初的记录。但是,添加新数据并非完全正常。 我的第二个想法是为每个记录设置一个“oldness”字段,在添加新数据集之前,将所有“oldness”字段增加1,然后删除所有“oldness”为3的数据。
我担心这不是执行此操作的最佳方式,但我不确定这是否重要,因为它是一个相当小的数据库,不经常更新。也就是说,我当然愿意接受更好的算法来实现这一目标。
答案 0 :(得分:2)
我假设您的数据已存储,因此每个报告都有一个时间戳(日期)列,并且您始终希望删除x(在本例中为3)个月的数据。如果是这样,您可能会考虑使用mysql的DATEDIFF
函数。
例如,它可能看起来像这样:
DELETE from table1 WHERE datediff(CURRENT_DATE(), datecol) > 89
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff
答案 1 :(得分:0)
总是按月吗?
UPDATE table SET status = "oldness" WHERE date_inserted <= NOW() - INTERVAL 3 MONTH
答案 2 :(得分:0)
在user937146的帮助下,我想我已经找到了解决方案。基本上
$query = "SELECT MIN(timestamp) FROM new_items WHERE type = 'Book' ";
然后只需要花费时间戳,添加一个小时(因为数据上传时间可能超过一秒,可能只需一分钟就足够了),然后从数据库中删除早于该时间戳的所有内容。