我正在尝试搜索特定标签名称的所有帖子,同时仍然能够加入返回帖子的所有标签。
帖子
ID
...
标签
ID
姓名
蛞蝓
帖子标签
ID
帖子ID
标签_id
我将执行如下查询:
SELECT * FROM posts p
INNER JOIN posts_tags pt ON pt.post_id = p.id
INNER JOIN tags t ON pt.tag_id = t.d
WHERE t.slug = 'foo'
这将返回带有标签 foo
的所有帖子,但不再加入与帖子关联的其他标签。我怎样才能以这样的方式编写它,以便我仍然可以获得帖子上的所有标签?
例如,假设我有一篇帖子,有 3 个与之关联的标签:cat
、dog
和 chimp
。我想查询带有标签 dog
的帖子。如何构建一个查询来获取带有 dog
标签的帖子,确保 cat
和 chimp
标签也在结果?
最佳答案
如果您想要包含 foo
以及所有其他标签的所有帖子的所有标签,那么我认为您可以进行左连接。
SELECT * FROM posts p
INNER JOIN posts_tags pt ON pt.post_id = p.id
LEFT JOIN tags t
ON pt.tag_id = t.d
上面将为您提供所有帖子以及帖子的相关标签。您可以按 slug 排序
或者您可以添加一个带有左连接的子句来按您需要的标签进行过滤,如下所示:
SELECT * FROM posts p
INNER JOIN posts_tags pt ON pt.post_id = p.id
LEFT JOIN tags t
ON pt.tag_id = t.d AND t.slug IN ('foo') --add other tags if needed
关于MySQL按标签查询帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42934357/