【发布时间】:2013-01-25 22:37:34
【问题描述】:
我正在尝试从我的数据库中获取一些新闻文章并获取相关项目。 数据库结构如下:
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
我的结果如下所示:
文章:文章放在这里
作者:沃尔特·怀特、德克斯特·摩根、沃尔特·怀特、德克斯特·摩根
物品:绝命毒师、德克斯特、绝命毒师、德克斯特
编辑 2
执行 GROUP_CONCAT(DISTINCT name) 或 GROUP_CONCAT(DISTINCT itemTitle) 并不能解决我的问题,因为多个项目可以具有相同的 itemTitle 但不同的 ID。作者也是如此。这意味着我的结果可能看起来像“Dexter,Dexter”,但现在看起来像“Dexter,Dexter,Dexter,Dexter”
【问题讨论】:
-
要回答您的问题,查看一些示例数据和所需的输出会很有帮助。另外,我假设您尝试过使用 DISTINCT 关键字?
-
在不同的
id中有相同的article吗? -
你也能显示
items的表结构吗? -
@sgeddes 多个作者可以有相同的名字。
-
一篇文章只能有一个 news.id 但一个 news.id 可以连接到多个项目和/或作者。
标签: mysql sql database left-join