1

我有一张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 获取与文章关联的所有标签,或者如果没有第二次查询,这是不可能的?

4

3 回答 3

0

如果您追求多对多关系,我建议您将数据模型拆分为ArticleTagArticleTag保持ArticleTag关系。

ArticleTag表可能有ArticleId和列TagId。然后,您将文章和标签放在单独的表格中。

于 2012-12-02T16:09:23.800 回答
-1

如果您想获取与文章关联的所有标签,您只需要

select * from tags where article_id = ?

如果您还需要文章数据,则在进行连接时将得到非规范化结果:

select a.*, t.tag_name
from articles a
join tags t
on t.article_id = a.id

仅当您将名称转换为字符串并将它们连接起来,或者让您的应用程序摆弄这种东西时,才能为每篇文章创建一个标签名称列表。

于 2012-12-02T16:05:40.523 回答
-1

虽然你没有完全提到这两个表,但我认为你需要加入 a.article_id = t.article_id

于 2012-12-02T16:09:11.550 回答