我为条目列出注释,允许用户编辑现有注释,并跟踪这些修订。
表格结构:
评论:id,摘要
修订:comment_id,revision_id,时间戳
revisions.comment_id=评论.id
revisions.revision_id=新评论的id,进一步解释:当他们选择现有评论时,它会显示一个编辑表单,他们可以输入新评论并提交。它会将其作为新评论插入到评论表中,从该表中获取最后一个id,并在修订表中将其设置为revision_id。
我想在修订表上做一个选择不同(将多个comment_id、revision_id检索到应用程序中要使用的数组中):
例如:
select distinct comment_id from revisions
但是,是否可以根据最新的评论(修订。时间戳)选择合适的记录?
理论上:
从时间戳最大的修订中选择不同的comment_id
修订表示例:
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时间戳=2012022220000
更新:这似乎奏效了,但请让我知道是否有更好的方法
SELECT
distinct comment_id, max(timestamp)
FROM
revisions
GROUP BY
comment_id
UPDATE:我还需要包括revision_id,上面的查询只包括comment_id和时间戳
做到了:
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
)
如果我理解正确,您只需按时间戳降序排序,并获得第一个结果。
SELECT comment_id FROM revisions ORDER BY timestamp DESC LIMIT 0,1
编辑:我想我现在明白了,你真正想要的是什么,试试这个:
SELECT * FROM revisions GROUP BY comment_id ORDER BY timestamp DESC