在表中保存mySql行检查点?

时间:2010-02-26 18:35:43

标签: php mysql mysqli

我遇到了一个小问题,我确信有一个更方便/更简单的方法来实现解决方案,但目前所有的搜索都是空白的!

我有一个mysql数据库,由php页面[通过cron作业]定期更新,这会根据需要添加或删除条目。

我的问题是我还需要检查条目的任何细节(即电话号码或类似信息)是否已经改变,但是在每次通话时都不能这样做[不仅在我看来有点矫枉过正,但我受限于第三方API呼叫限制]此外,这不是关键信息。

所以我认为最好只检查每个页面调用一个条目,并在每个连续的页面调用中遍历rows / entires。

这样做的最佳方式是什么,即跟踪表格中应该检查的哪个条目/行?

我有两个关于如何实现这个的想法:

1)当前行的id可以保存到服务器上的文件中[当然不是最好的方式]

2)将一个额外的布尔字段[check]添加到表中,在第一个条目上设置为True,对所有其他条目设置为false。 然后在每个页面上调用它; 找到'where check = TRUE' 在此行上运行更新检查, 'set check = FALSE' '设置[下一行]检查= TRUE'

这是最好的方法,或者有人有更好的消化吗?

提前感谢!

.K

PS抱歉标题

2 个答案:

答案 0 :(得分:0)

不确定这是否是一个好的解决方案,但如果我必须每晚进行大量更新,我会将更新写入新的空白表,然后执行SQL选择以加入表并告诉我它们的不同之处,然后执行另一个SQL UPDATE,如

UPDATE table, temptable
SET table.col1=temptable.col1, table.col2=temptable.col2 ......
WHERE table.id = temptable.id;

答案 1 :(得分:0)

您可以使用ON UPDATE CURRENT_TIMESTAMP [http://dev.mysql.com/doc/refman/5.0/en/timestamp.html]隐式更新行的时间戳,或者在更新SQL中显式更新。然后,您需要做的就是选择具有最低时间戳的行(使用ORDER BY和LIMIT),然后您要处理下一行。只要您确保每次都更新时间戳。

e.g。假设您使用字段last_polled_on TIMESTAMP来存储轮询行的时间。 您的插入内容如下:

INSERT INTO table (..., last_polled_on) VALUES (..., NOW());

您的更新如下:

UPDATE table SET ..., last_polled_on = NOW() WHERE ...;

您选择要查看的下一行看起来像:

SELECT ... FROM table ORDER BY last_polled_on LIMIT 1;