2013-01-10 51 views
0

我有一個非常奇怪的問題。wordpress中的簡單SQL查詢問題

我只是想選擇所有在兩個給定類別中的功能。

我的繼承人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* 

再次返回崗位。

爲什麼然後,當這兩個條件都包含在內時,什麼都不會返回?

任何幫助將是appreciated.Thanks

回答

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

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「IDS 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 
); 
+0

感謝您的回覆。這對我來說不起作用,因爲我需要返回兩個類別中都有的所有帖子。使用IN(83,84)將返回可能只在一個類別中發佈的帖子 – richelliot

+0

@richelliot查看我的編輯。 –

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 
+0

比僅僅改變和或者更復雜 – DaveRlz

+1

取決於他是否希望與兩者匹配的結果(如我的示例中)或匹配的結果 - 在這種情況下或者是要走的路。 – twoleggedhorse

0

我假設你需要使用「OR」而不是「AND」。我的猜測是,你不是在尋找taxonomy_id是83和84的帖子,但是它是兩者之一嗎?

0

您所查詢的說:

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

這將返回任何結果,我懷疑你應該更改爲OR