我有一个非常奇怪的问题。
我只想选择两个特定类别中的所有帖子。
继承我的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*
再次,回复帖子。
为什么然后,当包含这两个条件时,什么都不返回?
任何帮助将不胜感激。谢谢
答案 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