即使数据库中有发布日期和到期日期,以下查询也不会返回任何结果
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')