2010-12-10 68 views
3

我有一些SQL代碼,很好用,並從我的Wordpress數據庫返回所需的結果。MySQL日期比較過濾器

但是,我根本不能讓我圍繞着如何篩選發言權之間的日期頭:

2010-12-10 00:00:00 

2010-12-15 00:00:00 

這裏是我的SQL代碼:

$SQL_K = "SELECT SQL_CALC_FOUND_ROWS wp_posts.* 
      FROM wp_posts 
      JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id) 
      WHERE 1 = 1 
       AND wp_posts.post_type = 'post' 
       AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'private') 
       AND wp_postmeta.meta_key = 'expiry_date' 
     GROUP BY wp_posts.ID 
     ORDER BY wp_posts.post_date DESC 
      LIMIT 0, 100 "; 
+2

怎麼辦你打電話給今年的第15個月嗎? – 2010-12-10 18:55:51

+0

oops,good spot ring0 – 2010-12-10 18:57:11

+0

2010-15-10與MySQL默認接受的YYYY-MM-DD格式不匹配,所以我會修復這些實例以便能夠使用MySQL日期相關功能。 – 2010-12-10 18:57:38

回答

6
WHERE date_column BETWEEN STR_TO_DATE('2010-12-10', '%Y-%m-%d') AND STR_TO_DATE('2010-12-15', '%Y-%m-%d') 

像這樣?

編輯:忘了結束報價。哎呀

EDITv2:將您的代碼與更新的查詢

EDITv3:小優化 刪除1 = 1相比,使用IN()用於wp_posts.post_status

SELECT  SQL_CALC_FOUND_ROWS wp_posts.* 
FROM  wp_posts 
    JOIN  wp_postmeta 
    ON  (wp_posts.ID = wp_postmeta.post_id) 
WHERE  wp_posts.post_type = 'post' 
    AND  (wp_posts.post_status IN ('publish','private')) 
    AND  wp_postmeta.meta_key = 'expiry_date' 
    AND  ___INSERT_NAME_OF_DATE_COLUMN_HERE___ 
    BETWEEN STR_TO_DATE('2010-12-05', '%Y-%m-%d') 
     AND STR_TO_DATE('2010-12-15', '%Y-%m-%d') 
GROUP BY wp_posts.ID 
ORDER BY wp_posts.post_date DESC 
LIMIT  0, 100 
+0

感謝隊友,我沒有得到任何結果現在(我的錯,雖然粗糙的): $ SQL_K =「SELECT SQL_CALC_FOUND_ROWS wp_posts * FROM wp_posts JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id),其中1 = 1 AND wp_posts.post_type ='post'AND(wp_posts.post_status ='publish'or wp_posts.post_status ='private')AND wp_postmeta.meta_key ='expiry_date'WHERE wp_postmeta.meta_key ='expiry_date'BETWEEN STR_TO_DATE('2010-12- ('%Y-%m-%d')AND STR_TO_DATE('2010-12-15','%Y-%m-%d')GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC LIMIT 0, 100「; – 2010-12-10 19:16:10

+0

我在那裏看到一個重複的WHERE。嘗試刪除它,並用'AND'替換它。我爲了放置而不是語法顯示WHERE子句。 ;-) – 2010-12-10 19:20:10

+0

布拉德,非常感謝你的代碼和幫助。結果現在顯示,但如果我將日期更改爲2010-12-06 - 2010-12-08(其中包括)之間,相同的結果顯示等,並沒有被過濾..所以接近 – 2010-12-10 19:27:30

1
use between date1 and date2 
+0

太感謝隊友 – 2010-12-10 23:12:42