2012-08-23 33 views
5

Esto debe ser simple pero jugué con él, y no obtuve todo lo que quería. Tengo el siguiente código:mysql seleccione las fechas en el rango de 30 días

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

Ahora bien, este selecciona eventos con fechas de este mes, pero la definición de este mes se muestra en la consulta es diferente de lo que necesito. Necesito que me muestre los eventos dentro de los 30 días y no solo este mes, es decir, agosto. Si inserto un evento en agosto, muestra el resultado. Si inserto septiembre, no lo hace aunque esté a menos de 30 días.

+0

"... Jugueteé con ella ..." Great! Date prisa y publica tu [violín] (http://sqlfiddle.com/) para que podamos jugar con él también. –

+0

jaja no violó allí para ser honesto..más como en el entorno de desarrollo, pero gracias por el gran recurso compañero –

Respuesta

39

Debe cambiar 1 MONTH a 30 DAY:

WHERE start_date > NOW() - INTERVAL 30 DAY 

limitarlo a 30 días en cualquier dirección:

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

¿No se especificó end_date? –

+0

@sys_debug: ¿Quieres una fecha de finalización? ¿Quieres que sea dentro de 30 días antes o después? ¿Hay una columna llamada 'end_date'? –

+1

en realidad no, gracias, pero esto todavía no funciona ... no muestra la entrada con fecha_inicial de 2012-09-06 –

2

¿Qué hay de la siguiente manera:

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

O

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

Esto le da un lapso de 30 días

1

espero que esto ayudará también

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