从具有一对多关系的3个表中进行选择

时间:2014-05-08 07:43:21

标签: mysql sql

我有一个问题。在我的数据库中,我有3个表:

文章:

id  title  content  date

标签:

id  name

Tags_in_news:

id  news_id  tag_id

其中news_id是新闻表的外键,tag_id是标签表的外键...如何选择附加到它们的文章和所有标签? 我创建了一个查询,但它为每个标记选择了一条新闻:

SELECT * FROM articles join tags_in_news
ON articles.id = tags_in_news.news_id
join tags on tags.id = tags_in_news.tag_id
ORDER BY date DESC

2 个答案:

答案 0 :(得分:2)

尝试GROUP BY文章并将标记分组为逗号分隔值 这样的事情:

SELECT 
date, a.title, GROUP_CONCAT(DISTINCT t.name) as tags_attached
FROM articles a 
JOIN tags_in_news tin ON a.id = tin.news_id
JOIN tags t ON t.id = tin.tag_id
GROUP BY a.id
ORDER BY date DESC

答案 1 :(得分:1)

您的查询非常接近,因为您正在加入它将列出所有匹配的行,并且您将获得每个标记的文章多行。 在mysql中有一个名为group_concat()的函数,您可以将其与group by一起使用,以便与文章关联的所有标记都以逗号连接,然后为每篇文章显示它。

select
a.title,
a.content,
a.date,
group_concat(t.name) as name
from tags_in_news tin
inner join article a on a.id = tin.news_id
inner join tags t on t.id = tin.tag_id
group by a.id

<强> DEMO