2011-06-20 17 views
10

Mam kwerendy MySQL, który jest uruchamiany przez crona co 30 minut, aby usunąć stare ofert nieruchomości, kwerenda jest:MySQL DATETIME DIFF zapytania

DELETE FROM $wpdb->posts WHERE post_type = 'rentals' AND DATEDIFF(NOW(), post_date_gmt) >=2 

teraz ITS w fazie testowej i ustawić, aby usunąć, gdy lista ma 2 dni, to działa bez problemu, problem polega na tym, że potrzebuję go do rozpoznania czasu od momentu opublikowania wpisu i czasu, do którego powinien on zostać usunięty,

Zasadniczo tabela kolumna post_date_gmt jest w formacie 2011-05-26 13:10:56, a typ kolumny to DATETIME, gdy mam DATEDIFF (NOW() kwerenda z uruchomieniem musi być równa 48 godzin lub więcej od bieżącego czasu, aby usunąć wpis, to się nie dzieje, zapytanie wydaje się powiedzieć "to jest drugi dzień, usuń wpis", więc zostanie usunięty i może to być kiedy tylko ma 24 i pół godziny, jak mogę sprawić, żeby przeszło dokładnie 48 godzin?

Pozdrowienia

+0

Czy używając timediff produkować takie same wyniki? – BugFinder

Odpowiedz

17

Spróbuj timediff z delty zamiast 48 godzin. Lub użyj 3-dniowej delty, jeśli precyzja nie jest problemem.

Spróbuj HOUR(TIMEDIFF(NOW(), date))

SELECT count(*) FROM $wpdb->posts WHERE post_type = 'rentals' AND HOUR(TIMEDIFF(NOW(), post_date_gmt)) >=48 

Istnieje wiele MySQL funkcji data/czas: http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_hour

Uwaga: Należy używać wybierz przed próbą DELETE

+0

Dzięki, rozumiem, że masz na myśli coś takiego: "DELETE FROM $ wpdb-> posty WHERE post_type =" rentals "i TIMEDIFF (NOW(), post_date_gmt)> = 48' jeśli nie, to jak mogę się dowiedzieć (w kategoriach manekiny) jak zaimplementować deltę? dotyczy – MartinJJ

+0

bardzo dziękuję za poświęcony czas VGE, oznaczony jako odpowiedź i podążając za linkiem – MartinJJ

0

można DATEDIFF(NOW(), post_date_gmt) >= 3 i zostanie on usunięty 48 i pół godziny stare