Mysql Left连接多个1到多个表

时间:2013-08-24 20:36:04

标签: mysql join left-join

我试图从1 Mysql query的3/4表中获取以下数据,想知道是否可能?表格是

TOPIC
topicid (FK)(PK)
groupid
topic
user

LIKED
likeid
topicid (FK)
user

COMMENT
commentid (PK)
topicid (FK)
comment
user

我写了我的主题并在主题表中存储了唯一的topicid。我使用groupid对每个主题进行分组。 其他表可能每个topicid有0个或更多数据。

我正在尝试获取特定组的每个主题,并从相关表中获取其他数据。我检查了How to left join multiple one to many tables in mysql?并且得到了一些想法,但这是为了计数,而我想从该表(喜欢的用户)和(用户及其评论)中获取详细信息。

我试过了

SELECT t.topicid,
       topic,
       group_concat(DISTINCT likeid,l.user SEPARATOR '|'),
       group_concat(DISTINCT commentid,comment,c.user SEPARATOR '|') AS comments
FROM TOPIC t
LEFT JOIN LIKE l ON l.topicid = t.topicid
LEFT JOIN COMMENT c ON c.topicid = t.topicid
WHERE t.groupid='some_value'
GROUP BY t.topicid

虽然这部分有效,例如我确实得到了详细信息,但前提是组中只有一个主题。如果组中有2个或更多主题,则concat详细信息仅存储在第一个记录中,后面的主题不显示任何喜欢和评论。

有人可以帮我纠正这个或任何特定的Mysql function我失踪

1 个答案:

答案 0 :(得分:0)

我非常抱歉浪费你的时间,经过彻底的重新检查后我发现我的桌面数据错了(在制作了sqlfiddle之后检查了@Barmar)。

我错误地在like和comment表中插入了错误的数据。因此,对topicid='2'的第二个主题groupid='1'的喜欢和评论被误插为topicid='1',这就是为什么细节只在第一个主题中显示而第二个主题没有出现的原因。

上面的SQL是绝对正确的,并且谢谢你帮助我找到错误。 非常抱歉再次发布。

相关问题