首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获得所有或任何已提供标签的帖子?

如何获得所有或任何已提供标签的帖子?
EN

Stack Overflow用户
提问于 2018-03-17 10:58:31
回答 1查看 35关注 0票数 1

我有三张桌子:

代码语言:javascript
复制
posts (id, title, ...)
    1, Post title

tags (id, name, slug)
    1, Tag one, tag-1
    2, Other tag, tag-2
    3, Third tag, tag-3

posts_tags (id, post_id, tag_id)
    1, 1, 1
    2, 1, 2
    3, 1, 3

我正在尝试构建一个查询,以获取所有具有所有或任何提供的标记的帖子。

这就是我现在拥有的

代码语言:javascript
复制
SELECT DISTINCT p.* FROM posts p
LEFT JOIN post_tags pt ON pt.post_id=p.id
LEFT JOIN tags t ON t.id=pt.tag_id
-- WHERE --
ORDER BY $orderBy $order
LIMIT $limit

获取由我使用的任何提供的标记标记的帖子。

代码语言:javascript
复制
WHERE (t.slug='tag-1' OR t.slug='tag-2')

这似乎很有效,但问题是当我想让所有提供的标签标记的时候

代码语言:javascript
复制
WHERE (t.slug='tag-1' AND t.slug='tag-2')

即使有一个标记为标签-1和标签-2的帖子,我也得到了一个空的结果。

我没有任何错误,只是一个空的结果。知道为什么吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-17 11:00:55

对于所有标签,您可以:

代码语言:javascript
复制
SELECT p.*
FROM posts p JOIN
     post_tags pt
     ON pt.post_id = p.id JOIN
     tags t
     ON t.id=pt.tag_id
WHERE t.slug IN ('tag-1', 'tag-2')
GROUP BY p.id
HAVING COUNT(*) = 2  -- "2" is the number of tags
ORDER BY $orderBy $order;

请注意,此查询使用GROUP BY p.idSELECT p.*。这实际上是ANSI标准所允许的,只要id声明为unique (或等效为主键)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49335191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档