MYSQL Join - 父子表连接,只获取子表的最新记录
Posted
技术标签:
【中文标题】MYSQL Join - 父子表连接,只获取子表的最新记录【英文标题】:MYSQL Join - Parent and Child table join and get only the latest record from the child table 【发布时间】: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 以显示,考虑一次性获取它们,因为我们最初只显示一条评论...不知道应该是什么如果想要显示多个评论,最好的方法..?)
谢谢
问候
基兰
【问题讨论】:
【参考方案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 绝对是该帖子的最新消息。再次感谢以上是关于MYSQL Join - 父子表连接,只获取子表的最新记录的主要内容,如果未能解决你的问题,请参考以下文章
数据库(比如MYSQL) ,表连结查询与子查询哪个效率高些? 为啥
如何获取父子表(MS SQL Server/MSAccess)之间的参考信息?