4

我难住了。我需要访问nth row查询循环中的下一个以显示帖子之间的版本差异。

<cfquery>用来按组输出修订,这是我的预期输出:

Rev4
    diff(rev4.title, original.title)
    diff(rev4.brief, rev2.brief)
Rev3
    diff(rev3.body, rev2.body)
Rev2
    diff(rev2.brief, original.brief)
    diff(rev2.body, original.body)
Original
    query.title
    query.brief
    query.body

我最初想使用 Java 方法来获取下一个查询行。这不起作用:

  • Rev4需要显示它自己的简短行与上次对简短行所做的修订之间的差异;在这种情况下,发生在Rev2中;所以它需要跳一排。
  • 为了显示其标题行的差异,Rev4需要跳转到原始帖子,因为标题行的第一次更改发生在Rev4本身。

需要考虑的一些事项:

  1. 修订模式是每个已编辑帖子列的一行;因此,如果您加载帖子并编辑其标题正文,则会在修订模式中创建两条记录;一个用于标题,一个用于正文,在相同的revisionGUID下。
  2. 查询按revisionGUID分组。
  3. 它按修订日期排序,从最新到最旧;然后按修订类型(标题简介正文)。

我用 Java 标记了它,因为 ColdFusion 允许我们在查询对象上使用 Java 方法,但它没有记录,所以仅仅知道它的存在对我没有帮助。

任何人都可以告诉我一个[更好的]方法来做到这一点?

我想到的代码结构:

<cfoutput query="revisions" group="revisionGUID">
    #revision.revisionGUID#
    <cfoutput>
        // conditional logic to get diff();
    <cfoutput>
</cfoutput>
4

2 回答 2

1

抱歉,我不知道 Coldfusion,但听起来 (Java) 可滚动结果集可能很有​​用。

从 oracle 信息页面:

5.1 滚动
通过执行语句创建的结果集可以支持向后移动(从后到前)和向前(从前到后)移动的能力。支持此功能的结果集称为可滚动结果集。可滚动的结果集也支持相对和绝对定位。绝对定位是通过指定其在结果集中的绝对位置直接移动到行的能力,而相对定位提供通过指定相对于当前行的位置来移动到行的能力。 (链接:结果集增强)

ResultSet api 在顶部简要提到了它:

默认的 ResultSet 对象是不可更新的,并且有一个只能向前移动的光标。因此,您只能遍历它一次,并且只能从第一行到最后一行。可以生成可滚动和/或可更新的 ResultSet 对象。下面的代码片段,其中 con 是一个有效的 Connection 对象,说明了如何创建一个可滚动的、对其他人的更新不敏感且可更新的结果集。有关其他选项,请参阅 ResultSet 字段。

http://download.oracle.com/javase/1.4.2/docs/api/java/sql/ResultSet.html

希望这可以帮助您找到所需的内容 =)

于 2011-08-04T20:12:44.960 回答
1

如果您让数据库帮助您并使用以下查询来找出字段的先前值,怎么样:

SELECT TITLE AS PREVIOUSTITLE
FROM REVISIONS
WHERE ID < #query.id# AND TITLE <> '#query.title#'
ORDER BY ID DESC

SELECT BRIEF AS PREVIOUSBRIEF
FROM REVISIONS
WHERE ID < #query.id# AND BRIEF <> '#query.brief#'
ORDER BY ID DESC

SELECT BODY AS PREVIOUSBODY
FROM REVISIONS
WHERE ID < #query.id# AND BODY <> '#query.body#'
ORDER BY ID DESC

如果记录计数为 0,这意味着该字段从未更改过。

于 2011-08-04T20:34:23.873 回答