我有一个查询,它从前一个查询获取标记ID,并从post_tag_map表中选择post id。
$ tagIds例如可以是"3,4,23,54"
。
'SELECT post_id FROM post_tag_map WHERE tag_id IN (' . $tagIds . ') ORDER BY `post_id`;'
此查询可以正常工作,但它会返回任何具有任何tag_ids的post_id。
我试图只获取包含所有这些tag_ids的post_id。
例如,如果我搜索"新闻,政治,广告系列",我只想返回已使用所有这三个标签标记的帖子,而不是任何包含三个标签之一的帖子。
如何更改查询?
编辑:根据请求,我的表结构是3个表。一个(post)包含post_id和post信息,一个(tag)带有tag_id和tag_name,以及post_tag_map,只是将两个Ids映射到一起。
答案 0 :(得分:5)
嗯,它会有点复杂
继续使用您的IN内容以及群组帖子以查找具有完全匹配的内容
WHERE tag_id IN (3,4,23,54) GROUP BY `post_id` HAVING count(1) = 4;
其中4是我们正在寻找的标签数量