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

Php 每年更新一次记录,全年均匀分布,php,mysql,algorithm,Php,Mysql,Algorithm,我不确定用什么样的方式来描述我要做的事情,所以请耐心听我说。我在PHP中使用mysql数据库 我有一个10000条记录的数据库。假设我想全年每天更新10000/365。每项记录每年更新1次,并在一年中很好地传播 一种简单的方法是选择所有记录,然后对于每个记录,如果ID%365=每年的$day,则更新该记录。我不担心闰年 有没有一种方法可以只从数据库中选择我需要的记录(大约27条),而不是选择全部10000条并循环遍历每一条?这是一个我将在午夜跑步的工作,所以也许这是个未知数。尽管如此,我还是觉得

我不确定用什么样的方式来描述我要做的事情,所以请耐心听我说。我在PHP中使用mysql数据库

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

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


有没有一种方法可以只从数据库中选择我需要的记录(大约27条),而不是选择全部10000条并循环遍历每一条?这是一个我将在午夜跑步的工作,所以也许这是个未知数。尽管如此,我还是觉得很烦,我不得不用蛮力穿过所有的10000英里。我很想找到一个更优雅的解决方案,只需提取所需的一小部分即可。

在表格中添加一列,指明记录应更新的日期

然后添加一个每年运行一次的事件,该事件将重置该列的值并计算该列的新值—10000条记录在一年中的几天内分布


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

在表中添加一列,指示应更新记录的日期

然后添加一个每年运行一次的事件,该事件将重置该列的值并计算该列的新值—10000条记录在一年中的几天内分布


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

在表中添加一列,指示应更新记录的日期

然后添加一个每年运行一次的事件,该事件将重置该列的值并计算该列的新值—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
}
$day\u of_year=日期('z');
如果($day\u of_year<365){//不要在闰年的12月31日做
$qry=“选择……其中ID=$day\u of\u year”;
…做我的事
}

效果很好。再次感谢。

感谢您的回复,特别是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
}
$day\u of_year=日期('z');
如果($day\u of_year<365){//不要在闰年的12月31日做
$qry=“选择……其中ID=$day\u of\u year”;
…做我的事
}

效果很好。再次感谢。

感谢您的回复,特别是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
}
$day\u of_year=日期('z');
如果($day\u of_year<365){//不要在闰年的12月31日做
$qry=“选择……其中ID=$day\u of\u year”;
…做我的事
}

效果很好。再次感谢。

感谢您的回复,特别是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
}
$day\u of_year=日期('z');
如果($day\u of_year<365){//不要在闰年的12月31日做
$qry=“选择……其中ID=$day\u of\u year”;
…做我的事
}

效果很好。再次感谢。

问题:这是通过使用PHP脚本作为普通的“shell脚本”样式的实用程序实现的,还是您试图将其插入基于web请求触发的内容中(在这种情况下,不要这样做)10k记录似乎不多,如果它能使您的编码更紧凑、更高效,我会选择这条路线。在这个特定的用例中,让您的生活更轻松,只需在每个记录的列中记录“上次更新”的时间,然后选择并更新“先做最旧的记录”。虽然这是一个非常小的数据集,而且听起来没有理由不一次完成所有的工作。感谢您的快速响应!这是通过cron作业每晚运行的。不是由任何实时请求触发的。问题:这是通过使用PHP脚本作为普通的“shell脚本”样式的实用程序来实现的,还是您正在尝试将其插入基于web请求触发的内容中(在这种情况下,不要这样做)10k记录似乎不多,如果它能使您的编码更紧凑、更高效,我会选择这条路线。在这个特定的用例中,让您的生活更轻松,只需在每个记录的列中记录“上次更新”的时间,然后选择并更新“先做最旧的记录”。虽然这是一个非常小的数据集,而且听起来没有理由不一次完成所有的工作。感谢您的快速响应!这是通过cron作业每晚运行的。不是由任何实时请求触发的。问题:这是通过使用PHP脚本作为普通的“shell脚本”样式的实用程序来实现的,还是您正在尝试将其插入基于web请求触发的内容中(在这种情况下,不要这样做)10k记录似乎不多,如果它能使您的编码更紧凑、更高效,我会走这条路。在这个特殊情况下,请使用cas