Wygląda na to, że chcesz wiersze, w których end_date
jest później niż pięć dni temu.
Najlepszym sposobem na osiągnięcie tego jest
WHERE end_date >= CURDATE() - INTERVAL 5 DAY
Biznes dodawania liczb całkowitych do dat nie działa w MySQL (to rzecz Oracle). Musisz więc użyć jednostki INTERVAL n unit
składnia.
Zauważysz, że moja klauzula WHERE powyżej jest funkcjonalnie równoważna z
WHERE DATE(end_date) + INTERVAL 5 DAY >= DATE(NOW())
Ale pierwsze sformułowanie jest lepsze od drugiego z dwóch powodów.
- jeśli wspomnisz o
end_date
w klauzuli WHERE bez zawijania jej w obliczenia, twoje zapytanie może wykorzystać indeks w tej kolumnie i może działać szybciej. DATE(NOW())
iCURDATE()
oba odnoszą się do pierwszej chwili dnia dzisiejszego (północ). AleCURDATE()
jest nieco prostsze.