据this answer,以获得最新的记录各组中最好的办法是这样的:如何获得每组中的最新记录并检查它是否是唯一记录?
SELECT m1.*
FROM messages m1
LEFT JOIN messages m2 ON (m1.name = m2.name AND m1.id < m2.id)
WHERE m2.id IS NULL
我已经尝试这样做,它的伟大工程。
但是,我还需要检查最近的记录是否是组中的记录。我试着修改这个查询:
SELECT m1.*, COUNT(m3.name)
FROM messages m1
LEFT JOIN messages m2 ON (m1.name = m2.name AND m1.id < m2.id)
LEFT JOIN messages m3 ON m1.name = m3.name
WHERE m2.id IS NULL
但它只返回一行。
如果我删除COUNT()
声明,留给我们这样的:返回
SELECT m1.*
FROM messages m1
LEFT JOIN messages m2 ON (m1.name = m2.name AND m1.id < m2.id)
LEFT JOIN messages m3 ON m1.name = m3.name
WHERE m2.id IS NULL
重复行,所以显然是额外LEFT JOIN
混乱了查询。
有没有简单的方法来检查最新记录是否是只有组中的记录?一个简单的布尔值将会很好,或者组中的记录数量也可以工作。
编辑:我试图做到这一点的原因是,我正在写评论系统,我希望用户能够编辑评论。编辑评论时,我想显示一个显示编辑的链接,点击后,您可以进入显示编辑的页面(如在Facebook上,或者修订系统如何针对stackoverflow上的问题工作)。所以我需要得到每条评论的最新版本,以及一个让我知道评论是否有多个版本的指示器(所以我知道是否显示“已编辑”链接)。该解决方案需要高效,因为线程中可能会有数百条评论。
这是最好的办法,曾几何时,但一个不相关的子查询可能要快得多。 – Strawberry
@Strawberry你会怎么做呢? – Nate
@Nate就像Vulcronos和Gary的答案 – Aquillo