我有一个查询,该查询采用从先前查询中获得的标签ID,并从post_tag_map表中选择帖子ID。
例如,$ tagIds可以是"3,4,23,54"。
'SELECT post_id FROM post_tag_map WHERE tag_id IN (' . $tagIds . ') ORDER BY `post_id`;'
Run Code Online (Sandbox Code Playgroud)
该查询可以很好地实现其目的,但是它返回具有其中任何一个tag_id的post_id。
我正在尝试仅获取包含所有这些tag_id的post_id。
例如,如果我搜索“新闻,政治,竞选”,则只想返回已被所有这三个标签标记的帖子,而不是任何包含这三个标签之一的帖子。
如何更改查询?
编辑:根据要求,我的表结构是3表。一个(post)具有post_id和post信息,一个(tag)具有tag_id和tag_name,以及post_tag_map,仅将两个ID映射在一起。
好吧,它将变得更加复杂
保留您的IN内容,但也可以对帖子进行分组以查找完全匹配的帖子
WHERE tag_id IN (3,4,23,54) GROUP BY `post_id` HAVING count(1) = 4;
Run Code Online (Sandbox Code Playgroud)
其中4是我们正在寻找的标签数量
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |