1

我正在建立一个拍卖网站(很像 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 ; 
4

1 回答 1

4

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

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

于 2013-07-24T13:49:59.897 回答