我正在建立一个拍卖网站(很像易趣),你可以创建一个给定的基本价值和持续时间的拍卖。
这基本上是用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 ;
最佳答案
编写一个脚本,并在脚本内从数据库查询拍卖,其中结束时间等于现在。
然后在找到的拍卖品列表中循环,并向所有者发送电子邮件。
要自动执行此过程,请每隔一分钟左右通过CRON
运行此脚本。