繁体   English   中英

MySQL仅选择最大日期时间按外部分组的行

[英]MySQL select only rows with max datetime grouped by foreign

我正在实施一个论坛系统,并且有以下表格:

  • forumsidtitlecreated_at
  • forum_topicsidtitleforum_id created_at
  • forum_repliesidcontentforum_topic_id created_at

我正在尝试获取所有论坛,但我也想添加最后创建的forum_reply。

我真的陷入了困境。 任何帮助请

例如:

我有3个论坛:

  • 1,forums1
  • 2,forum2
  • 3,forum3

和这个主题(id,标题,forum_id):

  • 1,topic1_forum1、1
  • 2,topic1_forum2,2
  • 3,topic2_forum2、2
  • 4,topic1_forum3、3
  • 5,topic2_forum3、3

最后,此回复(id,内容,forum_topic_id,created_at)

  • 1,内容,1,2015-01-01 00:00:00
  • 2,内容,1,2015-02-01 20:00:00
  • 3,内容,2,2015-02-01 22:00:00
  • 4,内容,2,2015-02-01 22:30:00
  • 5,内容,3,2015-01-01 00:00:00
  • 6,内容,4,2015-01-01 00:00:00
  • 7,内容,5,2015-01-02 20:00:00
  • 8,内容,5,2015-01-03 00:00:00

所以我的最终结果应如下所示:

(forums.id,forum.title,forum_topics.id,forum_topics.title,forum_replies.id,forum_replies.content,forum_replies.timestamp)

  • 1,论坛1,1,主题1_论坛1,2,内容,2015-02-01 20:00:00
  • 2,forum2,2,topic1_forum2,4,内容,2015-02-01 22:30:00
  • 3,forum3、5,topic2_forum3、8,内容,2015年1月3日00:00:00

编辑

SQLFiddle充满表和数据

此过程有两个步骤-第一个步骤是确定最新帖子。 第二个是检索其余信息(例如主题标题和答复内容),这需要再次加入该结果集。

select *
from forums f 
  left join forum_topics ft
    on f.id = ft.forum_id
  left join forum_replies fp
    on ft.id = fp.forum_topic_id
  left join (
    SELECT f.id, MAX(fp.created_at) created_at
      FROM forums f 
        INNER JOIN forum_topics ft
          ON f.id = ft.forum_id
        INNER JOIN forum_replies fp
          ON ft.id = fp.forum_topic_id
      GROUP BY f.id
  ) q
    on fp.created_at = q.created_at
      and f.id = q.id
    where fp.created_at = q.created_at
      or fp.id is null;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM