【问题标题】:MYSQL Join - Parent and Child table join and get only the latest record from the child tableMYSQL Join - 父子表连接,只获取子表的最新记录
【发布时间】:2011-12-25 18:53:37
【问题描述】:

我有两张表 Posts 和 cmets

发布表

Post_id
Post_content

评论表

comment_id
Comment
post_id
created_date

一个帖子可以有多个 cmets 或零个 cmets

我的要求是使用左外连接获取帖子的最新评论。

我的意思是结果应该是具有以下列的帖子的一条记录。

post_id,post_content ,comment_id,comment 

简而言之,帖子应该与他们的最新评论(如果存在)保持一致。

( 目前系统是先获取帖子,然后再次访问服务器以获取最新的 cmets 以显示,考虑一次性获取它们,因为我们最初只显示一条评论...不知道应该是什么如果想要显示多个评论,最好的方法..?)

谢谢

问候

基兰

【问题讨论】:

    标签: mysql sql join greatest-n-per-group


    【解决方案1】:
    SELECT Post.post_id, post_content, comment_id, comment
    FROM
        Post LEFT JOIN Comments
            ON Post.post_id = Comments.post_id
            AND created_date = (
                SELECT MAX(created_date)
                FROM Comments
                WHERE Post.post_id = Comments.post_id
            )
    

    顺便说一句,您应该考虑为Comments {post_id, created_date} 编制索引以获得最佳性能,但如果您使用 InnoDB,请注意非主键索引开销(请参阅this article 中的“集群的缺点”部分)。

    【讨论】:

    • 感谢您的回复。我正在考虑类似于 oracle 中的分析功能。但在 Mysql 中找不到。
    • 也感谢这篇好文章 :) 我不知道这个。
    • @Bijji 据我所知,MySQL 中没有像 Oracle 那样的分析功能。欢迎你:)
    • 更改了您的查询位,而不是在 created_date 上,我直接反对 comment_id ... 因为评论 ID max 绝对是该帖子的最新消息。再次感谢
    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2019-02-21
    相关资源
    最近更新 更多