根据表中的上次更新时间更新数据库中的数据


Update data in db based on last update time from a table

在过去的几天里,我搜索了很多关于在数据库中列出fb点赞的内容。我也得到了这里的帮助。现在我知道如何从fb获得点赞数据,读取结果并在数据库中更新。

当我在一个循环中获得100多个fb页面时,如果我的最终用户更多,这会给数据库带来负担,代码运行量也很低。所以我做了两个链接。第一个链接(update.php)更新数据库中的数据,第二个链接(index.php)向用户显示运行速度快的数字。现在我想每一小时添加一个自动更新功能。

我知道它的逻辑,但不知道如何把它转换成语法。我想制作一个只有一个字段的"更新"表,该字段将是datatime类型。当最终用户访问链接时,它将首先从"更新"表中读取日期时间值。如果当前时间和表中上次更新的时间之间的差异超过一个小时,那么运行一个函数(我已经写了一个),或者在不运行该函数的情况下运行代码的剩余部分。

如果这个逻辑正确,请提供建议,并帮助我理解语法。

暂停后在下面编辑

我有一个代码(在update.php中),它从fb页面读取"Likes",并将其放在我的数据库fbdb中的表fbtable中的字段fblikes下。这是有效的。我有另一个代码(在index.php中),它从fbtable读取数据,并在前端显示fblikes字段值。最终用户将始终看到旧的Likes。。。即fbtable中可用的数据。只有当我运行update.php文件时,更新后的点赞才会显示给用户。我不会合并这两个文件,因为如果我有100多个页面,页面加载速度会非常慢,这就是为什么我想要一个函数来检查"更新"表中最后更新的日期时间,如果当前时间和最后更新的时间之差超过1小时,那么update.php应该运行以确保数据每1小时更新一次。

<?php
include "conn.php";
?>
<html>
<head>
.
.
</head>
<body>
read datetime from 'update' table
if current time - last updated time > 1 hour
run the function
else
do below task
.
.
show data from database to end user
.
.
</body>
</html>

感谢

首先,您可以考虑使用操作系统将更新任务安排为每小时运行一次,但如果您想遵循您建议的方法。。。

假设last_update表(简化)

create table last_update ( updated_at datetime);

然后你可以发送一个查询来查找最后一小时的更新

select max(updated_at) last_updated
from last_update 
where updated_at > now() - interval 1 hour

如果更新发生在最后一个小时,则返回最后一次更新时间;如果没有,则返回无行

select count(*) up_to_date 
from last_update 
where updated_at > now() - interval 1 hour

这将返回最后一小时内发生的更新次数,如果没有,则返回无行

您可以测试查询的结果,以决定是否运行更新功能

http://sqlfiddle.com/#!2/7cf706/2