我有一个articles
表和一个tags
表。标签表包含分配给文章的标签。它看起来像这样:
id | article_id | tag_name
---------------------------------
1 | 345 | cats
2 | 345 | dogs
我获取文章的查询(以及分配给每篇文章的所有标签)如下所示:
SELECT *
FROM `articles` a
JOIN `tags` t ON t.article_id = a.id
问题是,这只返回1个标签,如果超过1分配给特定的文章,则不返回。有没有办法可以使用JOIN获取与文章关联的所有标签,或者如果没有第二个查询,这是不可能的?
答案 0 :(得分:0)
如果您处于多对多关系中,我建议您将数据模型拆分为Article
,Tag
和ArticleTag
,并ArticleTag
持有这种关系。
ArticleTag
表可能包含ArticleId
和TagId
的列。然后,您将文章和标签放在单独的表格中。
答案 1 :(得分:-1)
如果您想获得与文章相关联的所有标签,只需
select * from tags where article_id = ?
如果您还需要文章数据,如果您进行加入,您将获得非规范化结果:
select a.*, t.tag_name
from articles a
join tags t
on t.article_id = a.id
只有将名称转换为字符串并将其连接起来,或者让您的应用程序摆弄这类内容时,才能创建每篇文章的标签名称列表。
答案 2 :(得分:-1)
虽然你没有完全提到这两个表,但我认为你需要加入a.article_id = t.article_id