2017-11-21 9 views
1

나는 새로운 주문을 만들고, NOW + 15 분을 데이터베이스에 삽입하는 PHP 스크립트를 가지고있다.MySQL select where timenow> database time

15 분이 지나면 사용자는 주문 페이지에 액세스 할 수 없습니다.

관리자 패널에서 만료되지 않은 레코드 만 표시하므로 내 질문에 어떤 선택 문을 사용하면 가장 효율적일까요?

SELECT * FROM `orders` WHERE datenow > date 

"날짜는"순서 + 15분

P.S.의 날짜입니다 Aternativly, PHP를 사용하여이 작업을 수행 할 수있는 방법이 있습니까? 그렇다면 데이터베이스에 너무 많은 스트레스를 가할 필요가 없습니까?

많은 감사!

+0

데이터베이스 datetime 함수 대신 bigints와 store timestamp를 사용하는 경향이 있습니다. 이것에 의해 가독성 (적어도 저의 경우)과 타임 스탬프 (int)에 의한 조작이 가능하게됩니다. 범위>와 <로 선택하는 것이 두 번째로 매우 간단합니다. – IncredibleHat

+0

나는 이것을하기 위해 SQL 쿼리가 무엇인지 알고 싶다. 내 쿼리는 물론 잘못된 것입니다 – rakupu

+0

PHP에서는 MySQL에서 주문을 제외하고 싶습니다. 결국 DB에 1000 개의 만료 주문이 있지만 활성화 된 주문은 1 개 뿐이므로 1001 개의 행을 반환하지 않아도됩니다. MySQL은 루프를 통해 PHP에서 1을 얻습니다. (어떤 식 으로든 테이블을 주기적으로 청소하지 않는 한) – WOUNDEDStevenJones

답변

4

아직 만료되지 않은 레코드를 원하면 dateNOW()보다 큰 모든 레코드를 원합니다.

SELECT 
    * 
FROM 
    `orders` 
WHERE 
    `date` > NOW() 

언급 된 의견에 따라 데이터베이스 측에서 처리하는 것이 일반적으로 더 좋습니다. 데이터베이스 및 웹 서버를 분리했다고 가정하고 전체 데이터 세트를 전송하여 응용 프로그램 코드에서 필터링하지 말고.

모든 datetime 함수가 동일한 서버 (이 경우 데이터베이스)에 있어야하는 다른 이점은 특히 일부 공유 호스팅 환경에서 데이터베이스의 시간대를 변경할 수 없다는 것입니다. 따라서 동일한 시간대에서 시간 비교를 수행하려고합니다.

+1

시간대에 대한 좋은 지적. PHP와 MySQL이 동일하게 설정되지 않으면 심각한 두통을 유발할 수 있습니다.) – IncredibleHat

+0

완벽하게, 정확히 무엇을 찾고 있었습니까? 대답으로 선택합니다 – rakupu

+0

오 ... 같은 시간대, 나는이 문제를 충분히 처리해야만했다. – rakupu