Wordpress自定义查询未返回结果


Wordpress Custom Query Doesnot return result

即使数据库中有发布日期和到期日期,以下查询也不会返回任何结果

SELECT wposts.* 
FROM qit_posts wposts INNER JOIN qit_postmeta wpostmeta ON wposts.ID = wpostmeta.post_id
WHERE wposts.post_type IN ('ad_listing') AND 
wpostmeta.meta_key ='cp_publish_date' 
      AND wpostmeta.meta_value <= '2013-12-10' 
      AND wpostmeta.meta_key ='cp_expiry_date' 
      AND wpostmeta.meta_value >= '2013-12-10' 

在数据库表中有一个post,它有一个元字段cp_publish_date,值为2013-12-08,cp_expiry_date为2013-12-31查询应该返回特定的原始数据,但它没有返回,有人知道这一点吗,可能是什么问题,这里的日期格式在比较中没有问题,我处理得很好

正如我所看到的,你在wpostmeta.meta_key中查找,但你已经使用了"AND"参数,你使用了两个不同的值。

wpostmeta.meta_key ='cp_publish_date'  AND AND wpostmeta.meta_key ='cp_expiry_date'

您应该使用"or"参数。

我想你想那样做;

SELECT wposts.* 
FROM qit_posts wposts INNER JOIN qit_postmeta wpostmeta ON wposts.ID = wpostmeta.post_id
WHERE wposts.post_type IN ('ad_listing') AND (
wpostmeta.meta_key ='cp_publish_date' 
      AND wpostmeta.meta_value <= '2013-12-10' ) OR
       (wpostmeta.meta_key ='cp_expiry_date' 
      AND wpostmeta.meta_value >= '2013-12-10' )

放轻松

使用STR_TO_DATE(str,format) wp的meta_value是文本类型,您需要根据所需的日期格式将其转换为日期,还需要为两个不同的键加入qit_postmeta两次

SELECT wposts.* 
FROM qit_posts wposts 
INNER JOIN qit_postmeta wpostmeta ON wposts.ID = wpostmeta.post_id
INNER JOIN qit_postmeta wpostmeta2 ON wposts.ID = wpostmeta.post_id
WHERE wposts.post_type IN ('ad_listing') 
AND  wpostmeta.meta_key ='cp_publish_date' 
AND STR_TO_DATE(wpostmeta.meta_value,'%d %M,%Y') <= '2013-12-10' 
AND wpostmeta2.meta_key ='cp_expiry_date' 
AND STR_TO_DATE(wpostmeta2.meta_value,'%d %Y,%Y') >= '2013-12-10'
GROUP BY wposts.ID

STR_TO_DATE(STR,format)

使用OR没有帮助。试试这个:

SELECT wposts.* 
FROM qit_posts wposts 
JOIN (
  SELECT post_id
  FROM qit_postmeta
  GROUP BY post_id
  HAVING SUM(
    CASE 
     WHEN meta_key ='cp_publish_date' AND meta_value <= '2013-12-10' THEN 1
     WHEN meta_key ='cp_expiry_date' AND meta_value >= '2013-12-10' THEN 1
     ELSE 0
    END 
    ) = 2
  ) wpostmeta
ON wposts.ID = wpostmeta.post_id
WHERE wposts.post_type IN ('ad_listing')