【问题标题】:How can I run a query in a specific time using MySQL or PHP?如何使用 MySQL 或 PHP 在特定时间运行查询?
【发布时间】:2016-12-17 15:08:07
【问题描述】:

是否可以在特定时间运行查询,例如每秒/分钟。顺便说一句,我正在构建一个简单的拍卖系统,我正在谈论的查询是检查是否有产品已经过期。表示它们的 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 中的某个位置。如果我这样做了,它会影响我的页面加载性能吗?因为它会每秒运行一次。

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

【问题讨论】:

    标签: mysql sql ajax


    【解决方案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

    【讨论】:

      【解决方案2】:

      您无需在客户端每秒都检查一次。如果有人访问该产品的页面,您将在那里运行一个 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 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-04
        • 1970-01-01
        • 1970-01-01
        • 2017-03-15
        • 1970-01-01
        • 2014-12-07
        • 1970-01-01
        相关资源
        最近更新 更多