如何使用MySQL或PHP在特定时间运行查询?

时间:2016-08-11 03:35:27

标签: mysql sql ajax

是否可以在特定时间运行查询,例如每秒/分钟。顺便说一句,我正在建立一个简单的拍卖系统,我所说的查询是检查是否有产品已经过期。表示他们的datetime_end小于当前日期和时间。 所以我有这样的查询:

SELECT id, datetime_end FROM auction_product WHERE datetime_end < NOW() AND `status` = 0;

在确定是否有产品已过期后,我会创建一个查询,将其状态更改为1,表示状态为cancelled/closed

MySQL中是否有可以运行某个查询的函数?喜欢自动查询。或者我应该制作一个每秒运行一次的Ajax并检查是否有过期的产品?你能告诉我一些这个吗? 因为在我目前的设置中,我只是将AJAX放在产品页面和主页中。意味着如果用户在另一页面中,我的AJAX将无法运行。所以我想我会把我创建的AJAX放在页眉或页脚或全局JS中。如果我这样做会影响我的页面加载的性能?因为它会每秒运行一次。

非常感谢。我希望你能给我一些关于这个的想法。 :)

2 个答案:

答案 0 :(得分:1)

您不需要在客户端每秒检查一次。如果有人访问产品的页面,您将在那里运行ajax以检查是否剩余足够的产品。如果没有产品,您可以更新页面本身的数据库。

现在您还要确保定期更新,因此您可以在 Cron作业上在服务器端运行脚本。但是,您还需要确保不要在其上运行一些繁重的资源密集型脚本。您可以大约每小时或两小时运行一个cron作业,以便从服务器端定期更新它。如果任何用户查看产品,您将使用ajax自动更新,因此下次用户访问时,在两个cron作业之间,由于较早的用户,他们将看到页面已经更新。这将通过分发工作来减轻服务器的压力。

所以这个想法有点像这样:

 1)user enters-> visits page-> runs ajax to check if products are left -> update db if products are over
2)cron job checks if products are left every two hours-> updates db if products are over 

答案 1 :(得分:1)

你可以使用预定的事件在MySQL中执行此操作,例如:

CREATE EVENT IF NOT EXISTS expire_products
ON SCHEDULE 
EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP 
DO
  <insert your update statement here>;

您需要先通过命令行参数启用事件调度程序:

 --event-scheduler=ON 

或my.cnf / my.ini选项:

   event_scheduler=ON 

或在MySQL中运行以下命令:

   SET GLOBAL event_scheduler = ON;

有关详细信息,请参阅https://dev.mysql.com/doc/refman/5.7/en/create-event.html