5

给定一个查询(伪代码):

<cfquery name="myquery">SELECT * FROM stuff</cfquery>

我如何摆脱第一条记录?在这种情况下,更改 SQL 不是一种选择。我试过了:myquery.RemoveRows(0,1);但收到一个错误:

No matching Method/Function for Query.REMOVEROWS(numeric, numeric) found

我在Railo 3 BTW

4

6 回答 6

11

瞧:

myquery.RemoveRow(1);

正是我想要的。留给Railo 做一些不同的事情吧!

于 2011-04-21T23:58:11.373 回答
4

想不出一种从原始对象中删除一行的方法。我能想到的有两件事:

  1. 查询查询。这假设您能够识别您想要的记录并在 WHERE 中指定它们。

  2. 使用 queryNew() 构造一个新查询。将执行 querySetCell() 的原始查询循环到您想要的记录的新查询中。这个功能可以很容易地集成到 UDF 中。事实上,这样说让我想到检查 cflib.org。见#3

  3. 检查 cflib.org :) 见http://www.cflib.org/udf/QueryDeleteRows

于 2011-04-21T23:42:47.063 回答
2

“RemoveRows”实际上是对底层 Java 方法的调用,因此您必须转换这些数字。像这样:

myquery.RemoveRows(
    JavaCast( "int", 0 ) // starting row, zero-based
    ,JavaCast( "int", 1 ) // number to delete, returns error if too many
)

所以可能该方法是“int,int”,如果你不强制转换它,它看起来像“numeric,numeric”。有人可能会争辩说这是未记录的,但它非常简洁,您可以(就像我一样)将它包装在一个函数中,因此如果它发生更改,您只需用另一种解决方法替换函数的内容。

于 2011-08-25T19:20:41.767 回答
2

Railo 添加了 removeRows,请参见此处。我使用这种方法的 ACF 代码现在也可以在 Railo 上运行,没有任何变化。

有了这个,Railo 实现现在与 ACF 匹配。(还要注意,最初的 Railo 实现是基于 0 的,而新的和 ACF 版本都是基于 1 的。)

于 2012-03-19T03:17:01.803 回答
0

我通常会这样做的方式是查询如下查询:

SELECT * FROM myquery
LIMIT {1,10000}

这应该适用于Railo。它所做的是将查询偏移 1 并提取 10000 条记录。

你也可以这样做:

SELECT * FROM myquery
WHERE {primarykey} <> {value}

它选择除了您传入的主键值之外的所有记录。

ColdFusion 最棒的地方在于,有很多方法可以完全满足您的需求。

于 2011-04-22T02:11:19.960 回答
0

您可以在处理结果时跳过该行:

<cfoutput query="myquery">
  <cfif myquery.currentrow GT 1>
    <!---Do the work here. --->
  </cfif>
</cfoutput>
于 2011-04-27T04:46:06.553 回答