SQL
SELECT *
FROM posts
LEFT JOIN taxonomy_term_map
ON (posts.ID = taxonomy_term_map.object_id)
WHERE taxonomy_term_map.term_id
IN (98,119)
GROUP BY posts.ID DESC
HAVING COUNT(posts.ID ) >= 2
LIMIT 0,20
表格和列
帖子{ID,post_title等...}
taxonomy_terms {term_id,term_label,term_slug等。}
post_taxonomy_term_map {map_id,object_id,分类法,term_id} (注意:object_id与posts.ID值有关)
我的网站使用Toxi分类法对帖子进行标记/分类。每个帖子可以附加多个术语ID。
与帖子关联的每个分类术语在“ post_taxonomy_term_map”表中获得一条记录。
我当前使用的查询在结果顶部返回匹配的记录(“ GROUP BY posts.ID DESC”),以及与所提供的所有术语都不完全匹配的其他记录。
我只想选择与提供的所有术语ID值匹配的记录,其他所有内容都应忽略。另外,我想按posts.rank排序记录,但目前无法按GROUP排序帖子。
我将为您提供一些帮助。
答案 0 :(得分:0)
我认为此查询将满足您的需求:
select p.* -- get only the columns from posts
from posts p
join post_taxonomy_term_map m on m.object_id = p.id
where m.term_id in (98, 119) -- filter to specific terms
group by p.id
having count(*) = 2 -- filter out incomplete ones
order by p.rank -- order by rank
limit 20 -- get only the first 20 rows