1

所以我们有一个数据库。每隔一段时间,我们就会添加一个新数据集,并且应该删除最旧的数据集。

假设数据库是 6 月初:18 条记录,6 月下旬:15 条记录,8 月:23 条记录。当我们添加下一条记录时,我们想要删除六月初的记录。但是,添加新数据并不完全正常。我的第二个想法是为每条记录设置一个“旧度”字段,在添加新数据集之前,将所有“旧度”字段增加 1,然后删除所有“旧度”为 3 的数据。

我担心这不是执行此操作的最佳方法,但我不确定这是否重要,因为它是一个不经常更新的相当小的数据库。也就是说,我当然愿意接受更好的算法来实现这一点的建议。

4

3 回答 3

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

于 2011-09-12T18:49:31.857 回答
0

总是按月计算吗?

UPDATE table SET status = "oldness" WHERE date_inserted <= NOW() - INTERVAL 3 MONTH
于 2011-09-12T18:49:59.033 回答
0

在user937146的一点帮助下,我想我已经找到了解决方案。基本上

$query = "SELECT MIN(timestamp) FROM new_items WHERE type = 'Book' ";

然后只需获取该时间戳,添加一个小时(因为上传数据可能需要一秒钟以上,可能一分钟就足够了),然后从数据库中删除早于该时间戳的所有内容。

于 2011-09-12T19:59:51.537 回答