如何在拍卖结束时自动通知用户?

时间:2013-07-24 13:47:41

标签: php mysql stored-procedures cron

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

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

在拍卖结束时,为了通知拍卖师(调用PHP脚本或触发其他类型的事件),我应该使用什么方法来异步知道?

修改

我有一个cronjob启动并运行(每5分钟一次)。我的PHP脚本调用一个MySQL存储过程来选择所有无效的拍卖(AuctionEndDateTime< NOW())并将它们更新为关闭。

由于我在存储过程中执行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 ; 

1 个答案:

答案 0 :(得分:4)

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

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