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

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

我的问题是,我还需要检查条目的任何详细信息(即电话号码或类似信息)是否已更改,但每次通话时都执行此操作是不可能的[不仅在我看来有点矫枉过正,而且我受第 3 方 API 调用限制的限制] 另外,这不是关键信息。

所以我想最好是每次页面调用只检查一个条目,并在每个连续的页面调用中迭代行/整个行。

执行此操作的最佳方法是什么,即跟踪接下来应该检查表中的哪个条目/行?

我对如何实现这个有两个想法:

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

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

这是最好的方法吗?或者有人有更好的建议吗?

提前致谢 !

.k

PS抱歉标题

没有正确的解决方案

其他提示

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

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

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

例如假设您使用字段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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top