Я занимаюсь разработкой сайта аукциона в реальном времени для школьного проекта. Мы не можем вносить какие-либо изменения в дизайн базы данных.
В таблице «Товар» есть столбец для даты истечения срока (день окончания аукциона) и времени истечения (точное время, когда истекает аукцион). У этого также есть столбец, который указывает, открыт ли аукцион или закрыт. Этот столбец [AuctionClosed?] Необходимо обновить после достижения даты и времени истечения срока, что должно происходить в режиме реального времени.
Мы используем базу данных SQL Server, и веб-сайт работает на PHP7. Единственное возможное решение, которое я нашел, - запускать работу каждую секунду, но это слишком много.
Это функция, которую я хочу использовать для проверки столбца:
CREATE FUNCTION dbo.fn_isAuctionClosed (@Item BIGINT)
RETURNS BIT
AS
BEGIN
DECLARE @expirationDay DATE = (SELECT expirationDate FROM Item WHERE itemId = @Item)
DECLARE @expirationTime TIME = (SELECT expirationTime FROM Item WHERE itemId = @Item)
IF
DATE(GETDATE()) = @expirationDay AND TIME(GETDATE()) >= @expirationTime
OR
DATE(GETDATE()) > @expirationDay
RETURN 1
RETURN 0
END
И это процедура, которая обновляет столбец:
CREATE PROCEDURE updateAuctionClosed @Item BIGINT
AS
UPDATE Item
SET [AuctionClosed?] = fn_isAuctionClosed(@Item)
WHERE itemId = @Item