所以,我有这个 postgreSQL 数据库结构
帖子
编号 标题 文字
标签
编号 姓名
posts_tags
post_id tag_id
因此,一个帖子可以有多个标签,一个标签可以有多个故事。 我想做的是查询数据库并获取所有具有特定标签的帖子。 我可以用这样的方法来做到这一点:
SELECT p.* FROM posts p
INNER JOIN posts_tags pt ON pt.post_id = p.id
INNER JOIN tags t ON pt.tag_id = t.id
WHERE t.name = 'my_tag'
但我还想选择附加到每个帖子的所有标签,现在我可以做类似的事情
SELECT p.*, t.name` FROM posts p ...
而不是我上面所做的,但它只会给我一个标签的名称,而我需要得到所有标签。 最有效的性能方式是什么? 以及如何做同样的事情,但只选择包含多个指定标签的帖子?
最佳答案
最简单的方法可能是聚合:
SELECT p.*, ARRAY_AGG(t.name) as tags
FROM posts p INNER JOIN
posts_tags pt
ON pt.post_id = p.id INNER JOIN
tags t
ON pt.tag_id = t.id
GROUP BY p.id
HAVING bool_or(t.name = 'my_tag');
bool_or()
表示其中一个标签就是您要查找的标签。
关于sql - 基于多对多关系选择排序数据并选择所有相关数据的最有效方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54968257/