基于最新版本的不同记录

时间:2012-02-22 19:31:18

标签: php distinct oci8

我列出条目的评论,我允许用户编辑现有评论,并跟踪这些修订。

表格结构:

评论:id,摘要

修订:comment_id,revision_id,timestamp

revisions.comment_id = comments.id

revisions.revision_id =新评论的ID,进一步说明:当他们选择现有评论时,它会显示一个编辑表格,他们可以输入新评论并提交。它会将它作为新注释插入到注释表中,从该表中获取最后一个id并在revisions表中将其设置为revision_id。

我想在修订表上做一个select distinct(要将多个comment_id,revision_id检索到要在应用程序中使用的数组):

例如:

select distinct comment_id from revisions

但是可以根据最新评论(revisions.timestamp)选择合适的记录吗?

理论上:

从版本中选择不同的comment_id WHERE时间戳是最大的

修订表示例:

comment_id   revision_id   timestamp
         2            12   20120222180000
         2            13   20120222170000
         5            18   20120222190000
         5            19   20120222200000

在这个4行的例子中,我希望查询返回两行,

那是:

comment_id = 2,revision_id = 12时间戳= 20120222180000

comment_id = 5,revision_id = 19时间戳= 20120222200000

更新:这似乎可以解决问题,但如果有更好的方法,请告诉我

SELECT 
 distinct comment_id, max(timestamp)
FROM
 revisions 
GROUP BY
 comment_id

更新:我还需要包含revision_id,上面的查询只包含comment_id和timestamp

这样做了:

SELECT 
 distinct a.comment_id as comment_id, 
 a.revision_id revision_id,
 a.timestamp as timestamp
FROM
 REVISIONS a 
WHERE
 a.timestamp = ( 
 SELECT
  max(b.timestamp)
 FROM
  revisions b
 WHERE
  b.comment_id = a.comment_id
)

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你只需按时间戳排序,然后取第一个结果。

SELECT comment_id FROM revisions ORDER BY timestamp DESC LIMIT 0,1

编辑:我想我现在明白了,你真正想要的,试试这个:

SELECT * FROM revisions GROUP BY comment_id ORDER BY timestamp DESC