【发布时间】:2012-03-29 20:06:28
【问题描述】:
我创建了一个评论系统,允许用户为每个项目提交 cmets。
它变成了项目/范围蔓延的一部分,现在我需要实现用户编辑其原始 cmets 并跟踪这些 cmets 的功能。
所有 cmets 都位于 cmets 表中
comments: id, comment, item_id, timestamp
既然必须跟踪修订,我创建了一个名为修订的新表:
comment_id, revision_id, timestamp
所有 cmets(新的或旧的)都输入到 cmets 表中,如果用户决定修改现有评论,它将作为新记录输入 cmets,然后记录到修订表中。将新评论输入 cmets 表后,它将获取创建的 id 并将其传递到 revisions.reivison_id,它会使用用户修改的原始评论的 id 填充 revisions.comment_id(希望我没有不会失去你)。
现在我遇到了需要帮助的问题:我需要显示特定项目的所有 cmets 的列表,该列表会查询类似
select * from comments where item_id = 1
现在我添加了修订表,我需要检索特定项目的 cmets 列表(就像上面的查询一样)并且(这是踢球者)如果有任何评论被修订,我需要返回最该评论的最新版本。
最好的方法是什么?
我考虑过运行两个查询,一个是检索 cmets 表中的所有 cmets,存储在一个数组中,另一个查询是返回 revisions 表中的所有记录,我将在其中将 revisions.comment_id 设置为不同的并且只会想要返回最近的一个
修订查询可能看起来像这样
select comment_id DISTINCT, revision_id, timestamp
from revisions order by timestamp desc
仅显示每条评论的最新版本的最佳方式是什么(有些会有修订,而大多数不会)?
我不是 sql 专家,所以它可以使用 sql 来完成,或者我需要运行两个不同的查询,将数据存储到单独的数组中,然后通过每个数组运行,比较并删除旧版本的注释?下面的例子(部分理论上)
foreach($revisions as $r):
$comments = strip key/value from comments array where $r['comment_id'] is
found in comments array
endforeach;
return $comments; // return the comments array after it was stripped of the older comments
我想如果有一种方法可以运行一个查询以仅返回评论的最新版本列表是最佳做法,如果是这样,您能否为此提供适当的查询,否则这两个查询是两个数组并从 cmets 数组中剥离值是最好的方法还是更好的方法?
提前致谢。
【问题讨论】:
标签: php sql oracle oracle-call-interface