>

날짜 시간 필드가 2 주가 지난 행을 삭제해야합니다.

이것은 내가 생각 해낸 것입니다

$duration = Date::WEEK * 2; // int(1209600)
$query = 'DELETE FROM properties
            WHERE TIMEDIFF(' . date(DATE_ISO8601) . ', reserved_datetime) > ' . $duration;

종종 복잡한 쿼리를 작성하지는 않지만 (보다 편한 PHP로 작업하는 것을 선호 함) PHP에 대해 더 알고 싶습니다. 또한 PHP에서 이런 종류의 작업을 수행하는 것은 매우 비효율적이며 많은 행을 처리하고 있습니다.

아무도 내가 뭘 잘못하고 있는지 알아? 건배.

업데이트

저는 워크 크의 답변phpMyAdmin에서 SELECT로 약간 변경하여 무슨 일이 있었는지 알 수 있습니다.

이것은 내가 사용한 것입니다

SELECT *
FROM properties
WHERE date_sub( `reserved_datetime` , INTERVAL 2 week ) >0
LIMIT 0 , 30

그러나 유일한 문제는 reserved_datetime 가있는 행을 반환한다는 것입니다.   2010-02-28 10:45:59 입니다 (지금부터) 2 주도 채되지 않았습니다.

MySQL의 내부 날짜를 확인하려고 생각했습니다. 나는 date(DATE_ISO8601) 를 사용하고 있습니다  MySQL의 NOW() 때문에 내 쿼리에서  정확하지 않았습니다 (관심있는 2010-02-28 20:09:19 경우 반환되었습니다) ).

쿼리에서 현재 날짜를 지정하는 방법이 있습니까? 다른 제안이 있으십니까?

많은 감사합니다

다른 업데이트

다음은 phpMyAdmin의 스크린 샷입니다. 아, 그리고 3 만 반환하는 이유는 다른 모든 값에는 공백 값이 있기 때문입니다 (예 : 0000-00-00 00:00:00 )  


  • 답변 # 1

    사용 :

    FROM PROPERTIES p
    WHERE p.reserved_datetime <= DATE_SUB(NOW(), INTERVAL 2 WEEK)
    
    
    NOW() 를 사용했기 때문에 , 2 주일 날짜에 시간 부분이 포함됩니다.

  • 답변 # 2

    wallyk의 답변이 올바르지 않습니다. 거의 모든 날짜에서 2 주를 빼면 여전히 0보다 큽니다 (0 = 1/1/1970). 다음과 같은 것을 원한다고 생각합니다.

    DELETE FROM properties WHERE DATE_SUB(NOW(), INTERVAL 2 WEEK) > reserved_datetime
    
    

  • 답변 # 3

    mysql 데이터베이스가 없어서 제대로 작동하는지 말할 수는 없지만 postgresql에서는 작동합니다 :

    DELETE FROM properties WHERE (NOW() - reserved_datetime < interval '2 weeks')
    
    

  • 답변 # 4

    대신 시도해보십시오 :

    $query = 'DELETE FROM properties
             WHERE date_sub(reserved_datetime, interval 2 week) > 0';
    
    
    이것은 reserved_datetime 를 가정합니다.  표의 필드 이름입니다.

    (MySQL 5.0.46 표준으로 테스트)

  • 이전 mysql - 같은 행의 ID를 기반으로 이름을 얻는 방법은 무엇입니까?
  • 다음 html - 여러 부트 스트랩 열 크기를 사용하는 목적은 무엇입니까?