2012-08-23 10 views
5

Das muss einfach sein, aber ich habe damit herumgespielt, und habe nichts bekommen, was ich wollte. Ich habe den folgenden Code:mysql Daten in 30-Tage-Bereich auswählen

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

Nun ist diese wählt Veranstaltungen mit Terminen in diesem Monat, aber die Definition dieses Monats in Abfrage gezeigt ist anders als das, was ich brauche. Ich brauche es, um Ereignisse innerhalb von 30 Tagen zu zeigen und nicht nur diesen Monat, also August. Wenn ich ein Ereignis im August einfüge, zeigt es das Ergebnis. Wenn ich September einfüge, ist es auch nicht, obwohl es weniger als 30 Tage entfernt ist.

+0

helfen "... ich damit hantierte ..." Großartig! Beeilen Sie sich und posten Sie Ihre [Geige] (http://sqlfiddle.com/), so dass wir auch damit umgehen können. –

+0

haha ​​tüftelte nicht dort um ehrlich zu sein..mehr wie in der Entwicklungsumgebung, aber danke für die große Ressource mate –

Antwort

39

sollten Sie 1 MONTH ändern 30 DAY:

WHERE start_date > NOW() - INTERVAL 30 DAY 

es in beiden Richtungen bis zu 30 Tage zu begrenzen:

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

Also kein end_date angegeben? –

+0

@sys_debug: Möchten Sie ein Enddatum? Soll es innerhalb von 30 Tagen davor oder danach sein? Gibt es eine Spalte namens "end_date"? –

+1

eigentlich nein danke aber das geht immer noch nicht ... es zeigt nicht den Eintrag mit Start_Datum 2012-09-06 –

2

Wie wäre es wie folgt aus:

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

OR

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

Dies gibt Ihnen eine 30-Tage-Spanne

1

Ich hoffe, das auch

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