2013-07-24 3 views
1

저는 주어진 기본 값과 기간으로 경매를 만들 수있는 경매 사이트 (이베이와 훨씬 비슷합니다)를 만들고 있습니다.경매가 끝나면 자동으로 사용자에게 알리는 방법은 무엇입니까?

이것은 PHP와 MySQL로 기본적으로 수행됩니다. 이 정의 된 기간에 사용자는 입찰을 할 수 있습니다.

경매인에게 알리기 위해 (PHP 스크립트를 호출하거나 다른 종류의 이벤트를 트리거하기 위해) 경매가 종료 될 때 비동기 적으로 알 수 있어야한다는 것을 의미합니까?

편집 :

내가 cronjob에 위로 실행 (5 분마다)이있다. 내 PHP 스크립트는 모든 잘못된 경매 (AuctionEndDateTime < NOW())를 선택하고 닫힌 상태로 업데이트하는 MySQL 저장 프로 시저를 호출합니다.

스토어드 프로 시저에서 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 ; 
+0

대답을 추가하는 대신 답변을 답을 추가하는 것이 더 좋습니다. – Ram

답변

4

이 스크립트를 작성 및 종료 시간은 현재와 동일한 데이터베이스에서 스크립트 쿼리 경매 내부. 발견 된 경매 목록을 반복하여 소유자에게 전자 메일을 보냅니다.

이 프로세스를 자동화하려면 1 분마다 CRON을 통해이 스크립트를 실행하십시오.

+0

확실하지 않은'= NOW()'이 좋은 것입니다. 경매가 '09 : 56 : 35'에서 끝나고 스크립트가 '09 : 56 : 00'과'09 : 57 : 00 '에서 실행되면 어떻게 될까요? – Foobar

+0

일단 사이트가 가득 차면 인라인으로 처리하면 cron을 통해 처리 할 수 ​​있습니다. 완료된 루핑과 이메일을 보낼 때까지 경매 검색을 중단합니다. 5 분마다 실행 되더라도 훨씬 더 나은 cron이 될 것입니다. – Dave

+0

경매가 생성 될 때 AuctionEndDateTime <= NOW() 및 AuctionAlreadyExpired = 0'은 종료 날짜를 저장합니다. 귀하의 선택 및 나중에 udpate 내 예제와 같이 만료/comeplted 깃발을 – Dave

관련 문제