Wygląda na to, że próbujesz to zrobić:
WHERE specific_date < (NOW() + 5 days)
Przede wszystkim zastanów się dokładnie nad przypadkami brzegowymi. Te przypadki graniczne mogą ugryźć kostki w SQL. Czy naprawdę chcesz
WHERE specific_date <= (NOW() + 5 days)
Zrób swoją specific_date
sygnatury czasowe kolumn zawierają tylko dni (czyli daty z czasem równym północy), czy też zawierają daty i godziny? Jeśli zamierzasz uzyskać pożądane wyniki, musisz uważać na te szczegóły.
W każdym razie spróbuj tego:
WHERE specific_date <= DATE_ADD(NOW(), INTERVAL 5 DAY)
To dobry sposób na wykonanie takiego wyszukiwania. Wartość kolumny stoi samotnie po jednej stronie predykatu nierówności (<=
), aby mySQL mógł przeprowadzić skanowanie zakresu indeksów, jeśli masz indeks w kolumnie.
Arytmetyka dat w MySQL jest dość elastyczna. Możesz zrobić
NOW() + INTERVAL 10 SECOND
NOW() - INTERVAL 2 MINUTE
NOW() + INTERVAL 4 HOUR
CURDATE() - INTERVAL 1 WEEK /* midnight one week ago */
LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH /*first day of present month*/
NOW() - INTERVAL 1 QUARTER
CURDATE() - INTERVAL 5 YEAR
i tak dalej.