查询查找帖子没有自定义字段
问题描述:
我写这个查询来查找具有自定义字段“语言”,其值是“英语”的帖子或者帖子根本没有自定义字段“语言”。查询查找帖子没有自定义字段
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'))
但是,这仅返回具有自定义字段“语言”和它的价值岗位是“英语”
请帮我
答
你应该小心在括号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.
你可以给样品记录? – 2013-04-07 05:37:55
@JW我的所有帖子都有自定义字段,但是我的post_types不同,有不同的自定义字段 – Ehsan 2013-04-07 05:44:23