MySQL日期比较过滤器

问题描述:

我有一些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

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

use between date1 and date2 
+0

太感谢队友 – 2010-12-10 23:12:42