2013-04-07 57 views
0

我寫這個查詢來查找具有自定義字段「語言」,其值是「英語」的帖子或者帖子根本沒有自定義字段「語言」。查詢查找帖子沒有自定義字段

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

回答

1

你應該小心在括號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

0

試試這個,

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. 
相關問題