MySQL按标签查询帖子

标签 mysql sql

我正在尝试搜索特定标签名称的所有帖子,同时仍然能够加入返回帖子的所有标签。

帖子

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 个与之关联的标签:catdogchimp。我想查询带有标签 dog 的帖子。如何构建一个查询来获取带有 dog 标签的帖子,确保 catchimp 标签也在结果?

最佳答案

如果您想要包含 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/

相关文章:

mysql - 将子查询转换为连接

php - Isset 不适用于 post 方法

javascript - 如何检查多个字符串变量是否不为空或为空?

java - 在 jasper ireport 中传递空字段作为参数

c# - 哪一种是在 SQL Server 中复制数据库的最佳方法?

sql - 在 PostgreSQL 中 : FROM generate_subscripts($1, 1) g(i) 中的 g(i) 是什么?

PHP从数据库中选择随机ID

mysql - 如何安装 MySQL 二进制文件

mysql 为column1 或column2 插入唯一值?

mysql - 内连接 - 每行选出 2 个参数