我在列出文章及其各自的标签时遇到问题,也许有人可以帮助我。
想象一下查询:
select *.articles, tags.tag_name
from articles
left join tags on tags.article_id = articles.article_id
where articles.article_id = 1
如果文章只有一个标签,这样可以正常工作。问题是如果文章有多个标签,那么我为同一篇文章每个标签获得1行。如果我想在每个文章中显示这些文章,它会显示在同一篇文章中。
有没有办法将其保存在一行中,还是需要使用两个查询,一个用于文章信息,一个用于标记?这将是不好的,因为50个artciles的列表将需要50个查询来显示他们的标签。
答案 0 :(得分:0)
如果一篇文章可以包含多个标记,则必须创建一个包含文章和标记ID的中间表,这样您就可以将许多文章与许多标记链接起来。
然后您的查询将是
select *.articles, tags.tag_name
from articles
inner join rel_tags on articles.article_id = rel_tags.article and articles.article_id = 1
inner join tags on rel_tags.tag = tags.tag_id
答案 1 :(得分:0)
您可以使用GROUP_CONCAT
,默认情况下会在分组表达式中返回逗号分隔的值列表。例如
select a.article_id, GROUP_CONCAT(t.tag_name)
from articles a
left join tags t using (article_id)
where a.article_id = 1
group by a.article_id
或者使用连接运行一个查询并获取重复的文章信息,然后可以以编程方式重新组合。这可以通过使用ORM自动完成。
答案 2 :(得分:0)
您可以使用GROUP_CONCAT()
功能:
SELECT *.articles, GROUP_CONCAT(tags.tag_name)
FROM articles
LEFT JOIN tags ON tags.article_id = articles.article_ID
WHERE articles.article_id = 1
GROUP BY articles.article_id
它会将这些额外的行转换为单个字段。