wordpress中的简单SQL查询问题

时间:2013-01-10 10:38:53

标签: sql wordpress

我有一个非常奇怪的问题。

我只想选择两个特定类别中的所有帖子。

继承我的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

这应该返回一个结果,但它不会返回任何结果。

如果我发表评论:

*wp_term_relationships.term_taxonomy_id  = 83* 

我正在寻找的帖子被退回。

如果我发表评论:

*wp_term_relationships.term_taxonomy_id  = 84*

再次,回复帖子。

为什么然后,当包含这两个条件时,什么都不返回?

任何帮助将不胜感激。谢谢

5 个答案:

答案 0 :(得分: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);

OR

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

但是,我认为您正在寻找同时包含term_taxonomy_id'ID 83,84的那些帖子,在这种情况下,您正在寻找relation division;这是一种方法:

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
);

答案 1 :(得分: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不能同时拥有两个值。您可以将查询更改为使用OR而不是AND,或者您可以使用我提供的版本。

答案 2 :(得分: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

答案 3 :(得分:0)

我假设你需要使用“OR”而不是“AND”。我的猜测是你不是在寻找taxonomy_id分别为83和84的帖子,但它是两者中的哪一个?

答案 4 :(得分:0)

您的查询说:

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

这将不返回任何内容,我怀疑你应该将AND更改为OR