php - 如何自动更改插入数据库的时间戳的间隔?

标签 php mysql

背景:我目前正在 build 一个摄影画廊,每 2 小时发布一张新图片。当我处理和上传每张图片并将它们的信息存储在数据库中时,我会运行检查以查看我当前是否有等待将来发布的图片。该检查在下面举例说明。

$last_added = mysql_query("SELECT date FROM images ORDER BY date DESC");
$last_added = mysql_fetch_row($last_added);
$last_added = strtotime($last_added[0]);
    if($last_added < time() - 7200):
        $time = time();
    else:
        $time = $last_added + 7200;
    endif;

$timestamp = date( 'Y-m-d H:i:s', $time );

mysql_query("INSERT INTO images (name,date,artist,tags,id) VALUES ('".$name."','".$timestamp."','".$artist."','".$tags."','".$id."')");

基本上它会抓取具有最高日期的图像并检查它是在过去还是在未来。如果它是过去的,它用当前时间戳标记最新的图像,如果不是过去的,它用数据库中已有的最高图像 2 小时后的时间戳标记最新的图像。

我之所以这样设置,是因为我没有时间每天添加新图片,这样可以及时发布它们,让网站在我不在的时候保持活跃和更新。

问题:但是,当我有时间时,我想添加更多图像,而不是让它们在 30 天后添加,我想将间隔从 2 小时缩短到 1 小时...然后可能从 1 小时到 30 分钟,等等。

有没有一种方便的方法来首先检查日期最长的图像(比如今天 + 30 天),然后让它检查以开始填充间隔间隙,以便如果时间戳最长符合我们的标准,则添加的下一张图像将在即将发布的下一张图片 1 小时后添加(填补它与 2 小时后发布的图片之间的差距)。然后之后的图像将在第二个 future 排队图像填充该间隔间隙后 1 小时添加,等等。

目标是我可以继续标记和添加图像,它会自动让我为 future 排队,并根据我已经排队的时间自动减少间隔。

如果我不够具体,请告诉我。如果需要,我很乐意澄清。

最佳答案

当然。这是我会做的:

首先,创建两列...“添加”日期时间和“发布”日期时间。
Added 是您将它们放入数据库的日期时间,posted 是它们出现在您网站上的帖子中的日期时间。

确定每天要发布的图像的最小和最大数量。因此,如果您每天最少 1 张,最多 12 张,您希望脚本提前 7 天考虑,并且准备好 90 张图像,那么您希望脚本放置 84 张图像,每 12 天一张小时。相反,如果您准备好 42 张图像,脚本将以 4 小时的间隔放置所有 42 张图像。相反,如果您只准备好 3 张图片,则脚本会以 1 天的间隔放置 3 张图片。有道理吗?

创建一个脚本,每隔一小时左右在 cron 作业中运行……任何您认为有必要的东西。在此脚本中执行以下操作:

  1. SELECT COUNT(*) FROM images WHERE added IS NULL;(这决定了有多少图像尚未放置但您必须处理。)
  2. SELECT MAX(posted) FROM images;(这决定了我们上次发布图片的时间。)
  3. 接下来,我们计算出图像之间的时间。使用我的示例参数,这是 (7/imagecount)*24。如果大于 24(即每张图片 24 小时),则我们使用 24。如果小于 2(即每张图片 2 小时),则使用 2。
  4. 计算每张图片之间的时间,并确定 self 们上次发布图片以来是否已经过了足够的时间。
  5. 如果有,UPDATE images SET posted=NOW() WHERE id=12345。否则,什么都不做。
  6. 脚本结束。

因此,此脚本将每小时运行一次,并检查是否到了发布新图像的时间。如果不是,它什么都不做。如果是,它将只发布一个。在下一个小时,它将重新计算,从而将任何新图像或条件考虑在内。

我希望这个流程有意义。毫无疑问,还有其他方法可以解决此问题,但我认为这与您正在寻找的最接近。

关于php - 如何自动更改插入数据库的时间戳的间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8055735/

相关文章:

php - mysql 持久连接的优点

mysql - 如何使用 Mysql 存储过程将导出的文件放置在安全文件传输协议(protocol) (SFTP) 位置

mysql - 如何按月或年聚合日期 Mysql

php - Doctrine Symfony ORM 不使用 PHP 7.2 生成 MySQL UUID

php - 在 Woocommerce 中启动和停止 Ajax Overlay 微调器

php - 如何确保在检查时该值仅保存到表中一次?

php - 使用 MYSQL LAST_INSERT_ID() 检索插入行的 ID?

mysql - 从 DATETIME 获取日期。数据库

php - 如何将json模型对象保存到php mysql数据库

javascript - 使用另一个文件中的 session 变量创建 Json 对象