我正在尝试从我的数据库中获取一些新闻文章,并获取相关项目。 数据库结构如下所示:
news (id, article )
newsItemsRelation (id, newsId, itemId)
newsAuthorRelation (id, newsId, userId)
items (id, itemTitle )
然后我还有一个用于项目和用户及其数据的表格。
当我运行下面的查询时,如果我有同一篇文章的多位作者,我会得到重复的项目,如果我有同一篇文章的多个项目,我会得到重复的作者。
SELECT
article,
GROUP_CONCAT(name) AS author,
GROUP_CONCAT(itemTitle) AS item
FROM news
LEFT JOIN newsItemsRelation ON
newsItemsRelation.newsId = news.id
LEFT JOIN items ON
items.id = newsItemsRelation.itemId
LEFT JOIN newsAuthorsRelation ON
newsAuthorsRelation.newsId = news.id
LEFT JOIN profiles ON
profiles.id = newsAuthorsRelation.userId
GROUP BY news.id
编辑1
我的结果如下:
文章:文章在这里
作者:Walter White,Dexter Morgan,Walter White,Dexter Morgan
项目:打破坏,德克斯特,打破坏,德克斯特
编辑2
执行GROUP_CONCAT(DISTINCT name)
或GROUP_CONCAT(DISTINCT itemTitle)
并不能解决我的问题,因为多个项目可以具有相同的itemTitle但不同的ID。作者也一样。这意味着我的结果可能看起来像“Dexter,Dexter”,虽然现在看起来像“Dexter,Dexter,Dexter,Dexter”
答案 0 :(得分:2)
您的问题是您的商品与作者之间没有任何关联。因此,对于每个作者和每个项目,您将获得重复的结果。
尝试这样的事情:
SELECT
article,
author,
item
FROM news
LEFT JOIN (
SELECT
News.Id as NewsId,
GROUP_CONCAT(itemTitle) AS item
FROM news
LEFT JOIN newsItemsRelation ON
newsItemsRelation.newsId = news.id
LEFT JOIN items ON
items.id = newsItemsRelation.itemId
GROUP BY News.Id
) items on news.Id = items.NewsId
LEFT JOIN (
SELECT
News.Id as NewsId,
GROUP_CONCAT(Name) AS Author
FROM news
LEFT JOIN newsAuthorsRelation ON
newsAuthorsRelation.newsId = news.id
LEFT JOIN profiles ON
profiles.id = newsAuthorsRelation.userId
GROUP BY News.Id
) Authors on news.Id = Authors.NewsId
祝你好运!
答案 1 :(得分:1)
尝试按文章分组并对名称进行DISTINCT
SELECT
article,
GROUP_CONCAT(DISTINCT name) AS author,
GROUP_CONCAT(DISTINCT itemTitle) AS item
FROM news
LEFT JOIN newsItemsRelation ON
newsItemsRelation.newsId = news.id
LEFT JOIN items ON
items.id = newsItemsRelation.itemId
LEFT JOIN newsAuthorsRelation ON
newsAuthorsRelation.newsId = news.id
LEFT JOIN profiles ON
profiles.id = newsAuthorsRelation.userId
GROUP BY article
答案 2 :(得分:-1)
当我遇到这个问题时,我做的是使查询成为子查询并从那里进行过滤。另一种方法是列子查询方法(讨厌这个,因为它非常昂贵)。