如何查找包含多个类别ID(使用Toxi结构)的记录?

时间:2019-04-10 20:33:48

标签: mysql tags taxonomy

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排序帖子。

我将为您提供一些帮助。

1 个答案:

答案 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