0

私は本当に奇妙な問題を抱えています。

与えられた2つのカテゴリに含まれるすべての投稿を選択したいだけです。

これが私のSQLです:

SELECT  wp_posts.ID 
FROM wp_posts 
INNER JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
WHERE  wp_term_relationships.term_taxonomy_id  = 83  
   AND   wp_term_relationships.term_taxonomy_id  = 84

これは1つの結果を返すはずですが、何も返しません。

コメントアウトした場合:

*wp_term_relationships.term_taxonomy_id  = 83* 

探している投稿が返されます。

コメントアウトした場合:

*wp_term_relationships.term_taxonomy_id  = 84*

繰り返しますが、投稿が返されます。

では、なぜこれらの条件が両方とも含まれているのに、何も返されないのでしょうか。

どんな助けでもありがたいです。ありがとう

4

5 に答える 5

2

ありwp_term_relationships.term_taxonomy_id得ませんでした。=83=84

代わりにこれを試してください:

SELECT  
  wp_posts.ID 
FROM wp_posts 
INNER JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
WHERE  wp_term_relationships.term_taxonomy_id IN (83 , 48);

また

...
WHERE wp_term_relationships.term_taxonomy_id  = 83  
   OR wp_term_relationships.term_taxonomy_id  = 84;

しかし、ID 83 と 84 の両方を同時に持つ投稿を探していると思います。term_taxonomy_idこの場合は、関係区分を探しています。これを行う1つの方法は次のとおりです。

SELECT  
  wp_posts.ID 
FROM wp_posts 
INNER JOIN
(
   SELECT *
   FROM wp_term_relationships
   WHERE object_id IN (SELECT object_id
                       FROM  wp_term_relationships
                       WHERE term_taxonomy_id IN (83 , 48);
                       GROUP BY objecT_id
                       HAVING COUNT(term_taxonomy_id ) = 2)
)  t ON wp_posts.ID = t.object_id;

または:直接、なしでJOIN。そのようです:

SELECT  
  wp_posts.ID 
FROM wp_posts 
WHERE ID IN
(
    SELECT object_id
    FROM  wp_term_relationships
    WHERE term_taxonomy_id IN (83 , 48);
    GROUP BY objecT_id
    HAVING COUNT(term_taxonomy_id ) = 2
);
于 2013-01-10T10:45:54.780 に答える
1

両方の が関連付けられているすべての投稿を返したい場合は、term_taxonomy_id次を使用できます。

SELECT  p.ID 
FROM wp_posts p
INNER JOIN wp_term_relationships r
  ON p.ID = r.object_id
WHERE  r.term_taxonomy_id IN (83, 84)
GROUP BY p.ID 
HAVING count(distinct r.term_taxonomy_id) =2

これにより、両方の分類用語を持つすべてのレコードが返されます。

term_taxonomy_idは同時に 2 つの値を持つことができないため、クエリは機能しません。OR代わりに使用するようにクエリを変更するANDか、私が提供したバージョンを使用することができます。

于 2013-01-10T10:47:15.270 に答える
0

あなたのクエリは言う:

WHERE  wp_term_relationships.term_taxonomy_id  = 83  
AND    wp_term_relationships.term_taxonomy_id  = 84

これは何も返しません。ANDをORに変更する必要があると思います

于 2013-01-10T10:46:39.303 に答える
0

結果に両方のカテゴリの投稿を表示する場合は、両方の結果を取得して比較する必要があります。

SELECT a.ID
FROM   (
        SELECT  wp_posts.ID 
        FROM wp_posts 
        INNER JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
        WHERE  wp_term_relationships.term_taxonomy_id  = 83
        ) a
        INNER JOIN (
                    SELECT  wp_posts.ID 
                    FROM wp_posts 
                    INNER JOIN wp_term_relationships ON wp_posts.ID = wp_term_relationships.object_id
                    WHERE wp_term_relationships.term_taxonomy_id  = 84
                    ) b
            ON a.ID = b.ID
于 2013-01-10T10:46:16.047 に答える
0

「AND」ではなく「OR」を使用する必要があると思います。私の推測では、taxonomy_id が 83 と 84 の両方である投稿を探しているのではなく、2 つのうちの 1 つを探しているのではないでしょうか?

于 2013-01-10T10:46:32.077 に答える