2012-08-23 67 views
5

Điều này phải đơn giản nhưng tôi không thích nó, và không nhận được bất cứ điều gì tôi muốn. Tôi có mã sau đây:mysql chọn ngày trong phạm vi 30 ngày

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

Bây giờ điều này sẽ chọn các sự kiện có ngày trong tháng này, nhưng định nghĩa của tháng này được hiển thị trong truy vấn khác với những gì tôi cần. Tôi cần nó để cho tôi xem các sự kiện trong vòng 30 ngày và không chỉ trong tháng này, tức là tháng tám. Nếu tôi chèn một sự kiện vào tháng tám, nó sẽ hiển thị kết quả. Nếu tôi đưa vào tháng chín, nó không mặc dù nó là ít hơn 30 ngày nữa.

+0

"... Tôi fiddled với nó ..." Tuyệt vời! Hãy nhanh lên và đăng [fiddle] của bạn (http://sqlfiddle.com/) để chúng tôi có thể cùng với nó. –

+0

haha ​​không fiddle có được trung thực .. giống như trong môi trường phát triển nhưng cảm ơn cho các nguồn tài nguyên tuyệt vời mate –

Trả lời

39

Bạn nên thay đổi 1 MONTH-30 DAY:

WHERE start_date > NOW() - INTERVAL 30 DAY 

Để hạn chế nó đến 30 ngày trong hai hướng:

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

Vì vậy, không có end_date quy định? –

+0

@sys_debug: Bạn có muốn có ngày kết thúc không? Bạn có muốn nó được trong vòng 30 ngày trước hoặc sau? Có cột nào được gọi là 'end_date' không? –

+1

thực sự không có cảm ơn nhưng điều này vẫn không hoạt động ... nó không hiển thị các mục với start_date của 2012-09-06 –

2

Làm thế nào về như thế này:

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

HOẶC

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

này mang đến cho bạn một khoảng 30 ngày

1

Tôi hy vọng điều này sẽ giúp cũng

SELECT id,title,start_date 
    FROM events 
WHERE city = "$cityName" AND 
TIMESTAMPDIFF(DAY,start_date,now()) < 30 
ORDER BY start_date DESC 
Các vấn đề liên quan