2012-02-12 2 views
6

は次のようになります。フィルタポスト、彼らは唯一の特定のタグを持っている場合

SELECT wposts.ID AS ID, 
wposts.post_title, wposts.post_status, wposts.post_name, 
tag_terms.term_id AS tag_id 

FROM `wp_posts` AS wposts 

INNER JOIN wp_term_relationships AS tag_term_relationships ON (wposts.ID = tag_term_relationships.object_id) 
INNER JOIN wp_term_taxonomy AS tag_term_taxonomy ON (tag_term_relationships.term_taxonomy_id = tag_term_taxonomy.term_taxonomy_id AND tag_term_taxonomy.taxonomy = 'post_tag') 
INNER JOIN wp_terms AS tag_terms ON (tag_term_taxonomy.term_id = tag_terms.term_id) 

WHERE wposts.ID = '12345' 

AND wposts.post_type = 'post' 

AND wposts.post_status NOT LIKE 'private' 

AND tag_terms.term_id = '55' 

GROUP BY wposts.ID 
ORDER BY wposts.post_date ASC 

これにより、タグIDが55のすべての投稿を照会する必要があります。

私が行う必要があるのは、この1つのタグだけが含まれているが、他のタグは含まれていないすべての投稿を除外することです。

タグがある場合は投稿を表示します23,34,55,67 しかし、タグ55(および他のタグはない)があれば投稿を表示したくありません。 この特定のタグを含まない投稿もクエリに含める必要があります。

どうすればよいですか?

... 
GROUP BY wposts.ID 
HAVING COUNT(tag_terms.term_id) <> 1 
    OR MAX(tag_terms.term_id) <> 55 
ORDER BY wposts.post_date ASC 

のみポストタイプとステータスを確認するためにあなたのWHERE条件を変更:GROUP BYORDER BYHAVING条件を追加する

+1

あなたはそれが間違っています。 WP_queryクラスの投稿を常に選択する必要があります。http://codex.wordpress.org/Class_Reference/WP_Query – janw

+1

独自のプラグインを開発している場合を除き、@janwに同意すると、SELECT文を書く必要はありません。 – twilson

+1

ナンセンス。私はいくつかのメタ値、サムネイル、ユーザー名とタグをすべて同じクエリで照会する必要があります。 WP_Queryはダミーのためのもので、必要な柔軟性は許されません。 – reggie

答えて

4

してみてください。

また、wp_termsからのtag_id以外の項目を選択しない場合は、wp_term_taxonomyのterm_idを使用するだけで済みます。

+0

ありがとうございました。私はHAVING句について聞いたことがありませんでした。 – reggie

+0

uh ??これはどのように動作し、 'tag_terms.term_id'を選択し、同時に節を持つことで使用できますか?何かが欠けていますか? – Aprillion

+0

ここでは選択肢がありません。OPで選択したいものがわからない場合は、名前にGROUP_CONCATを使用するタグを使用したい場合や不要な投稿を除外して再度条件に参加することができます。質問の質問は、まったく異なるもので、目的は異なります。 – piotrm

1

特定のタグを含むすべての投稿が必要な場合は、なぜその質問に投稿IDを指定しましたか?あなたはこれらの記事が唯一与えられたタグIDを持っていることを確認する場合は

この次のクエリは、

SELECT wposts.ID AS ID, 
wposts.post_title, wposts.post_status, wposts.post_name, 
tag_terms.term_id AS tag_id 

FROM `wp_posts` AS wposts 

INNER JOIN wp_term_relationships AS tag_term_relationships ON (wposts.ID = tag_term_relationships.object_id) 
INNER JOIN wp_term_taxonomy AS tag_term_taxonomy ON (tag_term_relationships.term_taxonomy_id = tag_term_taxonomy.term_taxonomy_id AND tag_term_taxonomy.taxonomy = 'post_tag') 
INNER JOIN wp_terms AS tag_terms ON (tag_term_taxonomy.term_id = tag_terms.term_id) 


WHERE wposts.post_type = 'post' 

AND wposts.post_status NOT LIKE 'private' 

AND tag_terms.term_id = '55' 

GROUP BY wposts.ID 
ORDER BY wposts.post_date ASC 

今与えられたタグIDを持つすべての記事が表示されます、巣クエリは次のように:

SELECT wposts.ID AS ID, 
    wposts.post_title, wposts.post_status, wposts.post_name, 
    tag_terms.term_id AS tag_id 

    FROM `wp_posts` AS wposts 

    INNER JOIN wp_term_relationships AS tag_term_relationships ON (wposts.ID = tag_term_relationships.object_id) 
    INNER JOIN wp_term_taxonomy AS tag_term_taxonomy ON (tag_term_relationships.term_taxonomy_id = tag_term_taxonomy.term_taxonomy_id AND tag_term_taxonomy.taxonomy = 'post_tag') 
    INNER JOIN wp_terms AS tag_terms ON (tag_term_taxonomy.term_id = tag_terms.term_id) 


    WHERE wposts.post_type = 'post' 

    AND wposts.post_status NOT LIKE 'private' 

    AND tag_terms.term_id = '55' 

    GROUP BY wposts.ID 
    HAVING COUNT(tag_terms.term_id) <> 1 
    OR MAX(tag_terms.term_id) <> 55  
    ORDER BY wposts.post_date ASC 
関連する問題