查询查找帖子没有自定义字段

查询查找帖子没有自定义字段

问题描述:

我写这个查询来查找具有自定义字段“语言”,其值是“英语”的帖子或者帖子根本没有自定义字段“语言”。查询查找帖子没有自定义字段

SELECT DISTINCT wp_posts.* FROM wp_posts, wp_postmeta 
WHERE wp_posts.ID = wp_postmeta.post_id 
AND (wp_postmeta.meta_key = 'language' AND wp_postmeta.meta_value like '%English%' OR NOT EXISTS (SELECT * FROM wp_posts, wp_postmeta Where wp_postmeta.meta_key = 'language')) 

但是,这仅返回具有自定义字段“语言”和它的价值岗位是“英语”

请帮我

+0

你可以给样品记录? – 2013-04-07 05:37:55

+0

@JW我的所有帖子都有自定义字段,但是我的post_types不同,有不同的自定义字段 – Ehsan 2013-04-07 05:44:23

你应该小心在括号WHERE条件 -

尝试下面的查询 -

SELECT DISTINCT wp_posts.* FROM wp_posts , wp_postmeta 
WHERE wp_posts.ID = wp_postmeta.post_id 
AND ((wp_postmeta.meta_key = 'language' AND wp_postmeta.meta_value like '%English%') OR NOT EXISTS (SELECT * FROM wp_posts, wp_postmeta Where wp_postmeta.meta_key = 'language')) 

和一个更细g您需要在标识一个条件在子查询中存在类似下面 -

SELECT DISTINCT wp_posts.* FROM wp_posts , wp_postmeta 
    WHERE wp_posts.ID = wp_postmeta.post_id 
    AND ((wp_postmeta.meta_key = 'language' AND wp_postmeta.meta_value like '%English%') OR NOT EXISTS (SELECT 1 FROM wp_postmeta wp_postmeta1 Where wp_postmeta1.meta_key = 'language' and wp_postmeta1.post_id = wp_postmeta.post_id)) 
+0

您的查询与OP有什么不同? “AND”周围的括号不是必需的。 – 2013-04-07 06:00:59

+0

@Ehsan你应该在你的子查询中有ID比较条件。 我已添加到发布的查询..尝试与.. – 2013-04-07 06:13:49

试试这个,

SELECT DISTINCT wp_posts.* FROM wp_posts, wp_postmeta 
WHERE wp_posts.ID = wp_postmeta.post_id 
AND (wp_postmeta.meta_key = 'language' AND 
    wp_postmeta.meta_value like '%English%') 
OR (wp_postmeta.meta_key != 'language'); --Not sure if you want (!= language) or null. Change as required.