如何从ColdFusion查询中丢弃一行?

时间:2011-04-21 23:11:40

标签: coldfusion railo

给定查询(伪代码):

<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

6 个答案:

答案 0 :(得分:11)

瞧瞧:

myquery.RemoveRow(1);

完全符合我的要求。把它留给Railo来做一些不同的事情!

答案 1 :(得分:4)

无法想办法从原始对象中删除一行。我能想到的两件事是:

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

  2. 使用queryNew()构造一个新查询。循环遍历原始查询,将querySetCell()放入新查询中以获取所需的记录。此功能可以很容易地合并到UDF中。事实上,说明这让我想到检查cflib.org。见#3

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

答案 2 :(得分: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”,如果你不抛出它,它看起来像“数字,数字”。有人可能会说这是没有文档的,但它是如此简洁,以至于你可以(正如我所做的那样)将它包装在一个函数中,这样如果它发生了变化,你只需要用另一种解决方法替换函数的内容。

答案 3 :(得分:2)

Railo已添加removeRows,请参阅here。我使用此方法的ACF代码现在也在Railo上运行,没有任何更改。

有了这个,Railo实现现在与ACF匹配。 (另请注意,原始的Railo实现基于0,而新的和ACF版本都是基于1。)

答案 4 :(得分:0)

我通常采用的方式是查询以下查询:

SELECT * FROM myquery
LIMIT {1,10000}

这应该适用于Railo。它的作用是将查询偏移一个并拉出10000条记录。

你也可以这样做:

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

选择除传入的主键值以外的所有记录。

ColdFusion令人敬畏的是,有很多方法可以完全满足您的需求。

答案 5 :(得分:0)

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

<cfoutput query="myquery">
  <cfif myquery.currentrow GT 1>
    <!---Do the work here. --->
  </cfif>
</cfoutput>