如果PHP每分钟更新一次mysql,请排队

时间:2018-07-28 13:10:54

标签: php mysql

我正在尝试做一些可以在不同时间执行3种不同事情的事情。

因此,第一分钟将执行mysql查询,将设置的服务器更新为1。

第二分钟将更新,并将服务器行设置为2。

第三分钟将更新,并将服务器行设置为3

然后第四分钟将更新,并将服务器行再次设置为1。

第五分钟将更新,并将服务器行再次设置为2。

第六分钟将更新,并将服务器行再次设置为3,依此类推,但始终为1,2,3 1,2,3。

我可以做这样的事情,但是我的代码很长,我知道有可能做得短一些,但不知道怎么做。

$t_Min=date("i");

if ($t_Min == 1) {
mysql_query("UPDATE `list` SET `server` = '1'"); }

else if ($t_Min == 2) {
mysql_query("UPDATE `list` SET `server` = '2'"); }

else if ($t_Min == 3) {
mysql_query("UPDATE `list` SET `server` = '3'"); }

else if ($t_Min == 4) {
mysql_query("UPDATE `list` SET `server` = '1'"); }

else if ($t_Min == 5) {
mysql_query("UPDATE `list` SET `server` = '2'"); }

else if ($t_Min == 6) {
mysql_query("UPDATE `list` SET `server` = '3'"); }

2 个答案:

答案 0 :(得分:3)

最容易让SQL完成工作-在一个查询中:

UPDATE list SET server=IF(MOD(MINUTE(NOW()), 3) = 0, 3, MOD(MINUTE(NOW()), 3))

当然,这依赖于MySQL中正确的时间戳。您也可以使用变量存储MOD,但这很容易理解。


编辑:当然,如果您想使用PHP中的数字,则可以在那里进行数学计算。逐步分解为:

$t_Min = (int)date("i");
$minuteMod = $t_Min % 3;  // This is modulus
$minutes = ($minuteMod == 0 ? 3 : $minuteMod);

答案 1 :(得分:0)

使用模运算符%

$insertValue = ($t_Min-1) % 3 + 1;

这是一个示范:

$values = [1,2,3,4,5,6];

foreach ($values as $t_Min) {
    $insertValue = ($t_Min-1) % 3 + 1;
    echo "$t_Min => $insertValue \n";
}

会返回:

1 => 1 
2 => 2 
3 => 3 
4 => 1 
5 => 2 
6 => 3

演示:issue 472