我有一个问题。在我的数据库中,我有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
答案 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 强>