仅从作业 crons、MySQL 中的表更新最大id_post



>我有一个表格posts

id_post   |  status
3434        0
5655        3
5935        5
9867        1 
9990        3 
10975       5
11234       3

我正在运行一个作业 cron 以每四个小时更新一次状态3但仅一个接一个的帖子。

所以

第一次,将帖子5655状态从 3 更新为 1

第二次,将帖子9990状态从 3 更新为 1

第三次,将帖子11234状态从 3 更新为 1

我正在考虑使用,但我不确定,因为我无法在本地测试它。(cron 作业在服务器中使用另一个 SQL 脚本进行了测试,效果很好(

我正在考虑使用,但我不确定

UPDATE posts
SET    status=1
WHERE  status = 3
ORDER BY id_post ASC
LIMIT 1

我只需要一些确认这个sql语句会很好地工作,我在服务器上的cron作业中运行它。 谢谢你。

是的,您的查询将在MySQL中按预期工作。与其他数据库不同,MySQL支持update语句中的order bylimit。它们的行为在文档中进行了描述:

WHERE子句(如果给定(指定标识要更新的行的条件。如果没有WHERE子句,则更新所有行。如果指定了ORDER BY子句,则按指定的顺序更新行。LIMIT子句对可以更新的行数施加限制。

因此,您的查询将按原样选择带有status = 3的"第一"行(由排序列id定义(,并将status更改为1。下次执行时,将选取并更新带有status = 3的"下一个"行。

但是请注意,如果在随后的查询执行之间修改了表的内容(即,如果插入或更改了具有较早id的行,则status = 1(,则可能无法获得预期的确切行为。

最新更新