0

WordPress からの投稿をフィルタリングするために 3 つのカテゴリのチェックボックスを使用しています (この質問はクエリに関するものです)。実際には、次のクエリで結果を返す必要があることを知っています (フィルターで選択した内容に基づいて、7 行目を自動的に生成します)。 ):

SELECT * FROM wp_posts 
LEFT JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id) 
LEFT JOIN wp_term_relationships ON(wp_posts.ID = wp_term_relationships.object_id) 
LEFT JOIN wp_term_taxonomy ON(wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) 
LEFT JOIN wp_terms ON(wp_terms.term_id = wp_term_taxonomy.term_id) 
WHERE 
    wp_terms.slug IN ('academia') AND wp_terms.slug IN ('early-career') 
    AND wp_term_taxonomy.taxonomy = 'jobtype' 
    AND wp_posts.post_status = 'publish' 
    AND wp_posts.post_type = 'jobs' 
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC

academiaカテゴリがANDの投稿が少なくとも 5 件ありますearly-career

7 行目を 1 つのINステートメントだけに変更すると、その 1 つのカテゴリを適切にフィルター処理できます。

wp_terms.slug IN ('academia','journalism') //More than one from same category
AND wp_term_taxonomy.taxonomy = 'jobtype'......

学界またはジャーナリズムのいずれかであるすべての仕事を検索します (まさに私が期待するものです) が、他のINステートメントを追加すると、何も返されません (ロジックに一致する投稿があります)。

何かが間違っているかどうか教えてもらえますか (おそらくINと 値の間のスペースですか?)、何日も運がなかったので。

どんな助けでも大歓迎です!ありがとう!

PS誰かがこのサイトを見たいと思ったら (私の言いたいことを見て): http://www.libertyguide.com/jobs

現在、これが機能するまでOR、 any の代わりにグローバルがありINます。

4

2 に答える 2

0
SELECT * FROM wp_posts 
LEFT JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id) 
LEFT JOIN wp_term_relationships ON(wp_posts.ID = wp_term_relationships.object_id) 
LEFT JOIN wp_term_taxonomy ON(wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) 
LEFT JOIN wp_terms wt1 ON(wt1.term_id = wp_term_taxonomy.term_id) 
LEFT JOIN wp_terms wt2 ON(wt2.term_id = wp_term_taxonomy.term_id) 
WHERE 
   wt1.slug = 'academia' AND wt2.slug = 'early-career' 
    AND wp_term_taxonomy.taxonomy = 'jobtype' 
    AND wp_posts.post_status = 'publish' 
    AND wp_posts.post_type = 'jobs' 
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC

編集 N個のカテゴリをサポートするには、次のことを試してください。

SELECT * FROM wp_posts 
LEFT JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id) 
LEFT JOIN wp_term_relationships ON(wp_posts.ID = wp_term_relationships.object_id) 
LEFT JOIN wp_term_taxonomy ON(wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) 
WHERE 
    wp_term_taxonomy.taxonomy = 'jobtype' 
    AND wp_posts.post_status = 'publish' 
    AND wp_posts.post_type = 'jobs' 
    AND wp_term_taxonomy.term_id IN (SELECT term_id from wp_terms where slug = 'academia')
    AND wp_term_taxonomy.term_id IN (SELECT term_id from wp_terms where slug = 'early-career')
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC

また、コードに必要な回数だけANDwp_term_taxonomy...行を追加できます。

于 2012-04-27T17:59:56.703 に答える
0

句で複数の値を指定するINと、行はそれらの値の 1 つと一致する必要があります。2 つの句を指定INすると、行が両方に一致する必要がありますが、これは不可能です (varchar は同時に「アカデミア」と「初期のキャリア」の両方になることはできません)。

クエリの最後に次を追加してみてください。

HAVING COUNT(*) > [NUMBER OF VALUES SELECTED]

したがって、次のようになります。

SELECT * FROM wp_posts 
LEFT JOIN wp_postmeta ON(wp_posts.ID = wp_postmeta.post_id) 
LEFT JOIN wp_term_relationships ON(wp_posts.ID = wp_term_relationships.object_id) 
LEFT JOIN wp_term_taxonomy ON(wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) 
LEFT JOIN wp_terms ON(wp_terms.term_id = wp_term_taxonomy.term_id) 
WHERE 
    wp_terms.slug IN ('academia', 'early-career') 
    AND wp_term_taxonomy.taxonomy = 'jobtype' 
    AND wp_posts.post_status = 'publish' 
    AND wp_posts.post_type = 'jobs' 
GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC
HAVING COUNT(*) = 2
于 2012-04-27T17:56:32.777 に答える