2012-08-23 16 views
5

To musi być proste, ale bawiło mnie to i nie dostałem nic, co chciałem. Mam następujący kod:mysql wybierz daty w 30-dniowym zasięgu

SELECT id,title,start_date 
    FROM events 
WHERE start_date > DATE_SUB(NOW(), INTERVAL 1 MONTH) 
    AND city = '$cityName' 
ORDER BY start_date DESC 

Teraz wybiera wydarzenia z datami w tym miesiącu, ale definicja tego miesiąca przedstawionego w zapytaniu jest inna niż to, co muszę. Potrzebuję go, aby pokazać mi wydarzenia w ciągu 30 dni, a nie tylko w tym miesiącu, czyli w sierpniu. Jeśli wstawię wydarzenie w sierpniu, pokazuje wynik. Jeśli wstawię we wrześniu, nie będzie to mniej niż 30 dni.

+0

"... I bawił się z nim ..." Great! Pośpiesz się i opublikuj swoje [skrzypce] (http://sqlfiddle.com/), abyśmy mogli się z nim bawić. –

+0

haha ​​nie skrzypnął tam, aby być uczciwym .. bardziej jak w środowisku programistycznym, ale dzięki za wspaniałego partnera zasobów –

Odpowiedz

39

należy zmienić 1 MONTH do 30 DAY:

WHERE start_date > NOW() - INTERVAL 30 DAY 

Aby ograniczyć je do 30 dni w obu kierunkach:

WHERE start_date > NOW() - INTERVAL 30 DAY 
AND start_date < NOW() + INTERVAL 30 DAY 
+0

Więc nie podano end_date? –

+0

@sys_debug: Czy chcesz datę zakończenia? Czy chcesz go mieć w ciągu 30 dni przed lub po? Czy istnieje kolumna o nazwie "end_date"? –

+1

właściwie nie, dziękuję, ale to nadal nie działa ... nie pokazuje wpisu z datą_początkową 2012-09-06 –

2

Jak o tak:

...WHERE DATE(start_date) BETWEEN DATE_SUB(NOW(),INTERVAL 30 DAY) and DATE_SUB(NOW(),INTERVAL 1 DAY) AND city... 
1

LUB

AND TIMESTAMPDIFF(DAY,YOURDATE,now()) < 30

To daje rozpiętość 30-dniową

1

Mam nadzieję, że to pomoże również

SELECT id,title,start_date 
    FROM events 
WHERE city = "$cityName" AND 
TIMESTAMPDIFF(DAY,start_date,now()) < 30 
ORDER BY start_date DESC