【问题标题】:How to automatically notify an user when his/her auction ends?如何在拍卖结束时自动通知用户?
【发布时间】:2013-07-24 13:47:41
【问题描述】:

我正在建立一个拍卖网站(很像 eBay),您可以在其中创建具有给定基本价值和持续时间的拍卖。

这基本上是通过 PHP 和 MySQL 完成的。在这个定义的时间段内,用户可以出价。

我应该使用什么方法来异步知道拍卖何时结束以通知拍卖人(调用 PHP 脚本或触发另一种事件)?

编辑:

我有一个 cronjob 启动并运行(每 5 分钟一次)。我的 PHP 脚本调用 MySQL 存储过程,该过程选择所有无效拍卖 (AuctionEndDateTime

由于我在存储过程中执行SELECT,因此我希望返回更新的行,但它只返回我为获取当前时间戳所做的第一个SELECT

DELIMITER //

CREATE PROCEDURE closeAuctions ()
BEGIN
SELECT @TIMESTAMP_NOW := NOW();
START TRANSACTION;
SELECT *  FROM Auctions WHERE auction_deadline < @TIMESTAMP_NOW AND auction_closed = '0' FOR UPDATE;
UPDATE Auctions SET auction_closed = '1' WHERE auction_deadline < @TIMESTAMP_NOW;
COMMIT;
END //

DELIMITER ; 

返回:

+-------------------------+
| @TIMESTAMP_NOW := NOW() |
+-------------------------+
| 2013-07-26 15:57:20     |
+-------------------------+

我想要更新的行,因为它们包含我需要通知拍卖商的信息,并且我尝试使用存储过程来执行此操作,因此我只需访问数据库一次。

已解决:

DELIMITER //

CREATE PROCEDURE closeAuctions ()
BEGIN
DECLARE now TIMESTAMP DEFAULT CURRENT_TIMESTAMP;
START TRANSACTION;
SELECT *  FROM Auctions WHERE auction_deadline < now AND auction_closed = '0' FOR UPDATE;
UPDATE Auctions SET auction_closed = '1' WHERE auction_deadline < now;
COMMIT;
END //

DELIMITER ; 

【问题讨论】:

  • 最好将您的解决方案添加为答案,而不是添加问题

标签: php mysql stored-procedures cron


【解决方案1】:

编写一个脚本,并在脚本内从数据库中查询结束时间等于现在的拍卖。 然后遍历找到的拍卖列表并向所有者发送电子邮件。

要自动执行此过程,请每隔一分钟左右通过CRON 运行此脚本。

【讨论】:

  • 不确定=NOW() 是不是一件好事。如果拍卖在09:56:35 结束并且脚本在09:56:0009:57:00 运行会发生什么?
  • 我可能会通过 cron 来完成,如果您在网站满员后内联执行它,它将挂起搜索拍卖的负载,直到完成循环和发送电子邮件。即使它每 5 分钟运行一次,也最好 cron 来运行它
  • SELECT * FROM tblauctions WHERE AuctionEndDateTime &lt;= NOW() AND AuctionAlreadyExpired=0 存储创建拍卖的结束日期时间,然后您需要做的就是将其作为您选择的一部分,然后像我的示例一样更新过期/已完成标志
  • 不一定是 now 函数,只需在 DB 和脚本中使用时间戳,然后进行比较
  • 时间戳不适合日期时间字段类型
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-29
  • 2016-07-27
相关资源
最近更新 更多