每年更新一次记录,全年平均分布


Update records once a year, spread evenly throughout year

不确定描述我尝试做什么的最佳方式,所以请耐心等待。我使用的是PHP和mysql数据库。

我有一个10000条记录的数据库。假设我想在一年中每天更新10000/365。每项记录每年更新一次,并在全年传播良好。

一种简单的方法是选择所有记录,然后对于每个记录,如果ID%365=$day_of_eyear,则更新该记录。我不担心闰年。

有没有一种方法可以让我只从数据库中选择我需要的记录(大约27条),而不是选择所有10000条并循环浏览每一条?这是一份我将在半夜运行的cron工作,所以这可能是一个没有意义的问题。尽管如此,我还是很苦恼,因为我必须用蛮力读完所有的10000本书。我很想找到一个更优雅的解决方案,只需提取所需的一小部分。

在表中添加一列,指示应更新记录的年份。

然后添加一个每年运行一次的事件,该事件重置该列的值并计算出新的值——一年中有10000条记录。

然后添加另一个每晚运行的事件,更新当天的记录。

感谢您的回复,尤其是Juergen和Mike Pomax。这是解决方案。

我添加了一个新列,并用0到364之间的随机值填充每一行。我本可以用其他方式填充它,但这很容易,也很近。

这是我的伪代码:

$day_of_year = date('z');
if($day_of_year < 365){ //don't do on Dec 31 of leap year
   $qry = "Select ... WHERE ID = $day_of_year";
   ... //do my thing
}

效果很好。再次感谢。