4

如何使用查询查询选择特定范围的行?

例如

<cfquery name="myQuery" maxrows ="20" startrow="12">
 SELECT *
 FROM   previous_query
 WHERE  row_numer >= 12
</cfquery>

之类的东西...

4

2 回答 2

9

这是一个棘手的问题,但你的问题引起了我的兴趣。我我可能有一个解决方案

我写了一个函数,删除你想要的行之前的所有内容,然后删除你想要的行之后的所有内容。

函数 rowrange() 接受 3 个参数。1. 您正在使用的查询名称。2.你想要的起始行 3.你想要的行数。

更新:我的朋友 John Whish 指出我实际上不需要循环来让它工作。删除循环使这更具可扩展性。

<cfquery name="myQuery">
 SELECT *
 FROM   previous_query
 WHERE  row_numer >= 12
</cfquery>


<cfset  rowRange(myQuery,7,4)>
<cfdump var="#myQuery#">

<cffunction name="rowRange" hint="return a range of rows from a given query">
    <cfargument name="qObj" type="query" required="true">
    <cfargument name="start" type="numeric" required="true" default="1" hint="The number of the first row to include">
    <cfargument name="range" type="numeric" required="true" default="1" hint="The number of rows">


    <cfset var i = arguments.start+arguments.range-1>
    <cfset arguments.qObj.removeRows(i,arguments.qObj.recordcount-i)>
    <cfset arguments.qObj.removeRows(0,arguments.start-1)>

    <cfreturn arguments.qObj>
</cffunction>
于 2012-07-11T19:27:45.657 回答
0

不支持在 CF 中本地执行此操作,因此您必须在原始记录集中添加一列来为您进行计数。

SELECT ..., row_num AS Counter

Row_Num 可能因您的 DBMS 而异。

于 2012-07-11T15:51:59.677 回答