【问题标题】:Mysql Left join multiple 1 to many tablesMysql左连接多个1到多个表
【发布时间】:2013-08-24 20:36:04
【问题描述】:

我正在尝试从 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 编写我的主题并存储在 TOPIC 表中。我使用 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 详细信息仅存储在第一条记录中,后面的主题不显示喜欢和 cmets。

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

【问题讨论】:

  • 我很困惑。您正在通过topicid 加入和分组。然后你抱怨多个主题在一个组中时没有得到多个值。是否要按 groupid 排序?
  • 你能用示例数据制作一个 sqlfiddle,并显示所需的结果吗?
  • @Barmar 我在link 尝试了sqlfiddle。
  • @GordonLinoff 如果我按 groupid 分组,我将不会获得该组的单独主题。我想要的结果是 groupid= '1' 的 3 个 topicid,topics 的点赞数,每个 topicid 喜欢的用户得到了这个 groupid 的 cmets 数量,每个 topicid 的用户和评论得到了这个 groupid

标签: mysql join left-join


【解决方案1】:

非常抱歉浪费了您的时间,经过彻底重新检查后我发现我的表数据有误(在制作 sqlfiddle 后检查了感谢@Barmar)。

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

上面的SQL是绝对正确的,谢谢你帮我找错了。 非常抱歉再次发帖。

【讨论】:

    猜你喜欢
    • 2015-03-13
    • 2010-12-31
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 2021-09-02
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    相关资源
    最近更新 更多