给定一个查询(伪代码):
<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
给定一个查询(伪代码):
<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
瞧:
myquery.RemoveRow(1);
正是我想要的。留给Railo 做一些不同的事情吧!
想不出一种从原始对象中删除一行的方法。我能想到的有两件事:
查询查询。这假设您能够识别您不想要的记录并在 WHERE 中指定它们。
使用 queryNew() 构造一个新查询。将执行 querySetCell() 的原始查询循环到您想要的记录的新查询中。这个功能可以很容易地集成到 UDF 中。事实上,这样说让我想到检查 cflib.org。见#3
检查 cflib.org :) 见http://www.cflib.org/udf/QueryDeleteRows
“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”。有人可能会争辩说这是未记录的,但它非常简洁,您可以(就像我一样)将它包装在一个函数中,因此如果它发生更改,您只需用另一种解决方法替换函数的内容。
Railo 添加了 removeRows,请参见此处。我使用这种方法的 ACF 代码现在也可以在 Railo 上运行,没有任何变化。
有了这个,Railo 实现现在与 ACF 匹配。(还要注意,最初的 Railo 实现是基于 0 的,而新的和 ACF 版本都是基于 1 的。)
我通常会这样做的方式是查询如下查询:
SELECT * FROM myquery
LIMIT {1,10000}
这应该适用于Railo。它所做的是将查询偏移 1 并提取 10000 条记录。
你也可以这样做:
SELECT * FROM myquery
WHERE {primarykey} <> {value}
它选择除了您传入的主键值之外的所有记录。
ColdFusion 最棒的地方在于,有很多方法可以完全满足您的需求。
您可以在处理结果时跳过该行:
<cfoutput query="myquery">
<cfif myquery.currentrow GT 1>
<!---Do the work here. --->
</cfif>
</cfoutput>